我的数据库中有3个表。他们每个人都有一列,“索引”,链接所有3个字段。
我们的出发点是表a,以及其中的索引。如果索引不存在,我不需要它。
表b和c非常相似,表a中列出的每个索引都在b或c中,或两者都有。我需要做的就是确保表a中的所有字段都连接到表b或c中的字段。
我开始时:
SELECT *
FROM `table_a`
JOIN table_b ON table_a.index = table_b.index
哪个效果很好。但它会排除表a中所有不匹配的索引,这就是为什么我相信,当我添加:
UNION
FROM `table_a`
JOIN table_c ON table_a.index = table_c.index
我实际上得到的结果不多,而不是更多。
有人可以告诉我怎么说“如果索引不在表b中,那么查看表c?”
答案 0 :(得分:1)
我不确定这是你所追求的,但它会给你所有的结果,以及来自b OR c的任何可能的匹配。
SELECT *
FROM table_a
LEFT OUTER JOIN table_b ON table_a.index = table_b.index
LEFT OUTER JOIN table_c ON table_a.index = table_c.index
答案 1 :(得分:0)
您是否尝试过“全联盟”?
SELECT *
FROM `table_a`
JOIN table_b ON table_a.index = table_b.index
UNION ALL
SELECT *
FROM `table_a`
JOIN table_c ON table_a.index = table_c.index
答案 2 :(得分:0)
第一步:
SELECT * FROM
table_a
LEFT JOIN table_b ON table_a.index = table_b.index
LEFT JOIN table_c ON table_b.index = table_c.index
这将获得所有3个表中的所有索引。
如果你想从表_a,_b或_c中得到第一个非NULL的索引,你可以在MySQL中这样做:
SELECT COALESCE(table_a.index, table_b.index, table_c.index) AS firstIndexFromABC
FROM
table_a
LEFT JOIN table_b ON table_a.index = table_b.index
LEFT JOIN table_c ON table_b.index = table_c.index
或者你使用的是什么数据库? 更新: MySQL
一些评论后更新:
抱歉,我仍然没有得到它。这就是COALESCE方法的作用。你得到1列,如果它在那里,你会得到b,如果没有你得到b,如果它在那里,如果不是你得到c。
如果你的意思是,你想要的信息,你从哪个表中获取索引,那么试试这个:
SELECT COALESCE(table_a.index, table_b.index, table_c.index) AS firstIndexFromABC,
CASE WHEN table_a.index IS NULL AND table_b.index IS NULL THEN 'c'
WHEN table_a.index IS NULL AND table_b.index IS NOT NULL THEN 'b'
WHEN table_a.index IS NOT NULL THEN 'a'
END AS whichTable
FROM
table_a
LEFT JOIN table_b ON table_a.index = table_b.index
LEFT JOIN table_c ON table_b.index = table_c.index