根据其中一个表中的值从多个表中获取 SQL 结果
Posted
技术标签:
【中文标题】根据其中一个表中的值从多个表中获取 SQL 结果【英文标题】:Get SQL results from multiple table based on value in one of the tables 【发布时间】:2021-10-22 13:58:54 【问题描述】:我有一个主表(建议)和两个参考表(专家、朋友)
advices
----------------------------------------
|id | advisor_id | advisor_type |
----------------------------------------
| 1 | 6 | expert |
| 2 | 6 | friend |
| 3 | 7 | expert |
| 4 | 8 | expert |
----------------------------------------
expert
----------------------------------
|id | lastname | firstname |
----------------------------------
| 6 | Polo | Marco |
| 7 | Wayne | John |
| 8 | Smith | Brad |
----------------------------------
friend
----------------------------------
|id | lastname | firstname |
----------------------------------
| 6 | Doe | John |
| 7 | Brown | Jerry |
| 8 | Goofy | Doofy |
----------------------------------
我想获得所有建议(一些来自专家,一些来自朋友),并将他们各自的姓氏和名字作为结果集的一部分。
每个建议行都有参考表(专家表、朋友表),通过 id 和类型与之关联。
所以我希望得到一个基于 id 的结果,但取决于要查询哪个表的类型
结果如下所示 根据是专家还是朋友,结合参考表中的姓氏和名字。
advices (array)
----------------------------------------------------------------
|id | advisor_id | advisor_type | lastname | firstname |
-----------------------------------------------------------------
| 1 | 6 | expert | Polo | Marco |
| 2 | 6 | friend | Doe | John |
| 3 | 7 | expert | Wayne | John |
| 4 | 8 | expert | Smith | Brown |
-----------------------------------------------------------------
在非编程简单的单词术语中,我想创建一个这样的查询。
SELECT
advices.id, advices.advisor_id, advices.type
IF advices.type==expert THEN expert.lastname, expert.firstname
ELSE IF advices.type==friend THEN friend.lastname, friend.firstname
FROM advices, expert, friend
显然,我知道 SELECT 语句不允许这种类型的动态逻辑。但这可以通过其他方式完成吗?
【问题讨论】:
【参考方案1】:这应该可行:
SELECT a.*, e.firstname, e.lastname
FROM advices AS a
INNER JOIN expert AS e ON a.advisor_id = e.id AND a.advisor_type = 'expert'
UNION
SELECT a.*, f.firstname, f.lastname
FROM advices AS a
INNER JOIN friend AS f ON a.advisor_id = f.id AND a.advisor_type = 'friend'
【讨论】:
谢谢。我有一个小的后续问题。现在所有的建议都传给了一位用户。如果将来,我想让 advices 表有一个 user_id 字段,这意味着我没有想要显示所有建议,但只有一个特定于 WHERE user_id='1'。我会把它放在哪里? SELECT * FROM () d WHERE d.user_id = 1 这似乎不起作用,但我改为在 ON 子句中添加:INNER JOIN Expert AS e ON a。 userid='1' AND a.advisor_id = e.id AND a.advisor_type = 'expert' 及以后 INNER JOIN friend AS f ON a.userid='1' AND a.advisor_id = f .id AND a.advisor_type = '朋友'以上是关于根据其中一个表中的值从多个表中获取 SQL 结果的主要内容,如果未能解决你的问题,请参考以下文章
MS-Access SQL 将同一表中的值从“Value”更新为“*Value”