我有两个相同的表,但只有一个表存在记录,我需要选择要加入的表。
示例:
表目录:
| catalog_id | catalog_name |
表 catalog_draft :
| catalog_id | catalog_name |
表 catalog_items :
| item_id | catalog_id | item_name |
因此,通过这个小例子,我需要获取所有带有目录名称的项目,但目录名称可以在目录或 catalog_draft 表中。
答案 0 :(得分:3)
select something from table1 where id=?
union
select something from table2 where id=?;
example :
mysql> select 1 union select 1;
+---+
| 1 |
+---+
| 1 |
+---+
至于你的实际问题
select catalog_id, catalog_name from catalog where catalog_name=?
union
select catalog_id, catalog_name from catalog_draft where catalog_name=?;
上述联合将结合两个表的结果
这意味着如果目录存在于catalog表和catalog_draft表中,
只有第一个目录从目录表中返回
答案 1 :(得分:0)
你的问题很模糊。让我看看我是否做对了:
您有两个表A
和B
,两个表都有相同的列。您有一个存在于其中一行中的某一行。您想要找到该表并将其与其他表连接吗?
如果这是真的,这是你的答案:
假设表中包含这些列(id, data)
这是你如何做到的。对于每个表,您outer join
表自己,选择第一部分等于您要查找的所有行,但只选择其他列。然后你结合你为两个表做的事情:
(SELECT * FROM
A AS first RIGHT JOIN A AS second
ON first.id = your_id AND first.data = your_data)
UNION
(SELECT * FROM
B AS first RIGHT JOIN B AS second
ON first.id = your_id AND first.data = your_data)
这样,没有该条目的表将使其SELECT
返回一个空表UNION
和其他完整表。
以下是一个例子:
表A的数据
(0, 8324)
(1, 215)
(2, 47879)
当您进行外部联接(完全外部联接)时,您会得到:
(0, 8324, 0, 8324)
(0, 8324, 1, 215)
(0, 8324, 2, 47879)
(1, 215, 0, 8324)
(1, 215, 1, 215)
(1, 215, 2, 47879)
(2, 47879, 0, 8324)
(2, 47879, 1, 215)
(2, 47879, 2, 47879)
当您在first.id == 1 AND first.data == 215
上进行外部联接时,您会得到:
(1, 215, 0, 8324)
(1, 215, 1, 215)
(1, 215, 2, 47879)
现在,如果你有right join
ed而不是完全加入,你会得到:
(0, 8324)
(1, 215)
(2, 47879)
你有桌子A!如果您正在搜索不存在的条目,那么您将有一个空表。
最后,此命令的结果是您可以在其他地方使用的表,例如,如果您想将其与其他表连接:
SELECT * FROM
((SELECT * FROM
A AS first RIGHT JOIN A AS second
ON first.id = your_id AND first.data = your_data)
UNION
(SELECT * FROM
B AS first RIGHT JOIN B AS second
ON first.id = your_id AND first.data = your_data))
JOIN other_table ON some_condition
答案 2 :(得分:0)
我已经设法通过使用IF自己完成。解决方案查询是:
SELECT
ci.item_name, ci.item_id, IF(c.catalog_name, c.catalog_name, cd.catalog_name)
FROM catalog_items AS ci
LEFT JOIN catalog AS c
ON c.catalog_id = ci.catalog_id
LEFT JOIN catalog_draft AS cd
ON cd.catalog_id = ci.catalog_id