我有三个表a
,b
,c
,id
之间有共同点。
Table a:-
id name value
1 a 4
2 v 6
Table b:-
id abc
2 54
3 56
Table c:-
id bcd
1 54
3 34
现在我想要的是条件,数据来自所有表格的id。
请告诉我如何做到这一点。
预期结果 -
如果查询
select * from a left join b on a.id=b.id left join c on a.id=c.id where b.id=3
id name value bcd abc
3 NULL NULL 34 56
如果查询
select * from a left join b on a.id=b.id left join c on a.id=c.id where a.id=1
id name value bcd abc
3 a 4 54 NULL
答案 0 :(得分:3)
这种解决问题的方法怎么样? :)
SELECT
z.id,
a.name,
a.value,
c.bcd,
b.abc
FROM
(
SELECT
DISTINCT y.id id
FROM
(
SELECT id FROM a
UNION ALL
SELECT id FROM b
UNION ALL
SELECT id FROM c
) y
) z
LEFT JOIN a ON z.id = a.id
LEFT JOIN b ON z.id = b.id
LEFT JOIN c ON z.id = c.id
where z.id = 3
这样你只需要给查询一个不关心它存在于哪个表中的数字。
答案 1 :(得分:1)
这取决于您在WHERE
条件下设置的内容。如果您要设置WHERE b.ID = 3
,那么您需要加入其他表格,如下所示:
SELECT A.ID AS A_ID,A.Name, A.value
,B.Id as B_ID,B.abc
,C.id AS C_ID, c.bcd
FROM b
LEFT JOIN a ON a.id = b.id
LEFT JOIN c ON a.id = c.id
WHERE b.id=3;
这是因为{A}不在表A中,表C与表A连接。
如果您设置表A.ID = 1,那么您必须使用b.ID = 3
加入其他表,如下所示:
LEFT JOIN
答案 2 :(得分:0)
这在技术上是不可能的,当你使用ID在哪里可以获得数据,以防任何特定表中没有id,你正在改变where;)的逻辑。
但你可以做的是
SELECT * FROM (选择AID作为ID,名称,来自A的值 联盟 选择BID作为ID,NAME,NULL作为B的值 联盟 SELECT CID as ID,NAME,NULL AS VALUE FROM C) WHERE ID =''
希望这有帮助
否则请澄清。你想要什么。
此致
Ashutosh Arya
答案 3 :(得分:0)
我会尽力猜测,即使我几乎找不到对预期结果的解释:
SELECT
b.id,
a.name,
a.value,
c.bcd,
b.abc
FROM
b
INNER JOIN c ON b.id = c.id
LEFT JOIN a ON b.id = a.id