我有2个表,这两个表都有很多列。但是,它们有一列具有相同的名称。
现在,我想从这两个表中进行选择,但我希望我的第二个表的值覆盖第一个表的值。
这样的事情:
SELECT d.*,
IFNULL((SELECT animal FROM test2 WHERE id = 1), d.animal) as animal
FROM test1 as d
WHERE d.id = 5
所以基本上我想要的是如果它在第二个表中找到一个动物,将第一个覆盖到完全相同的名称,否则什么都不做。
重要的是查询必须需要" animal"的名称结果,因为整个应用程序依赖于它。
是否可以轻松实现?
答案 0 :(得分:3)
问题可能是d.*
中有一个名为animal
的列。只需为新列添加不同的别名:
SELECT d.*,
IFNULL((SELECT t2.animal FROM test2 t2 WHERE t2.id = 1), d.animal) as new_animal
FROM test1 d
WHERE d.id = 5;
或单独列出所有列,但不包括旧的animal
:
SELECT d.col1, d.col2, . . .,
IFNULL((SELECT t2.animal FROM test2 t2 WHERE t2.id = 1), d.animal) as new_animal
FROM test1 d
WHERE d.id = 5;