我发现很多方法只显示不同的结果,但我如何同时选择不同的和非不同的?请考虑以下表格:
A
---------------------------------
| id | col1 | col2 |
---------------------------------
| 1 | aa | dd |
---------------------------------
| 1 | bb | ee |
---------------------------------
| 2 | cc | ff |
---------------------------------
B
---------------------------------
| id | col1 | col2 |
---------------------------------
| 1 | a | d |
---------------------------------
| 2 | b | e |
---------------------------------
| 3 | c | f |
---------------------------------
C
---------------------------------
| id | col1 | col2 |
---------------------------------
| 1 | x | 1a |
---------------------------------
| 2 | y | 2b |
---------------------------------
| 3 | x | 3c |
---------------------------------
用户向我提供了一个id和一列列,比如id = 1和columns =(a.col1,b.col1和c.col2)。我将如何构建查询以向我提供id匹配的所有列信息,无论id出现多少次?
我目前的查询是:
SELECT a.col1, b.col1, c.col2
FROM a
LEFT JOIN b
ON b.id = a.id
LEFT JOIN c
ON c.id = b.id
WHERE a.id = 1
问题是,当我想获得两个结果时(或者任何恰好具有匹配的重复ID的表的所有结果),这只能给出表A中的一个结果。注意:在表A中,列id和col1一起构成了主键,这就是我重复ID的原因。
连连呢?
谢谢!
答案 0 :(得分:1)
在问题的数据中,表A中没有重复的id。查询应该只从A返回一行,然后。
但是,您的查询有错误。第二个连接应该回到第一个表,而不是第二个表:
SELECT a.col1, b.col1, c.col2
FROM a
LEFT JOIN b
ON b.id = a.id
LEFT JOIN c
ON c.id = a.id
WHERE a.id = 1
如果该表中没有匹配项,则c.id = b.id
和b.id
可能为NULL。
另外,根据您的描述,我想知道union
是否是最佳方法:
select a.col1, 'a'
from a
where id = 1
union all
select b.col1, 'b'
from b
where id = 1
union all
select c.col2, 'c'
from c
where id = 1