MySQL:查询一个表并可能用另一个表中的值替换某些字段
我有两张桌子。表1是我们的主要数据表,表2有表1列的子集和表1中包含的记录的子集。您可以将表2视为包含表1中某些记录的更正值的表 我想使用以下规则从这些表中查询一条或多条记录: (1) 如果记录的id仅存在于表1中,我希望返回该记录的所有列(相当于MySQL:查询一个表并可能用另一个表中的值替换某些字段,mysql,Mysql,我有两张桌子。表1是我们的主要数据表,表2有表1列的子集和表1中包含的记录的子集。您可以将表2视为包含表1中某些记录的更正值的表 我想使用以下规则从这些表中查询一条或多条记录: (1) 如果记录的id仅存在于表1中,我希望返回该记录的所有列(相当于select*fromtable1,其中Table1.id位于(1,2,3)) (2) 如果记录的id同时存在于Table1和Table2中,那么对于Table2中的每一列,Table2值应优先于Table1的相应值。对于表1中的所有列(而不是表2中的
select*fromtable1,其中Table1.id位于(1,2,3)
)
(2) 如果记录的id同时存在于Table1和Table2中,那么对于Table2中的每一列,Table2值应优先于Table1的相应值。对于表1中的所有列(而不是表2中的列),我们返回表1的值
例如:
表1
| id | Column1 | Column2 | Column3 | Column4 |
----------------------------------------------
| 1 | AA-1-1 | AA-1-2 | AA-1-3 | AA-1-4 |
| 2 | AA-2-1 | AA-2-2 | AA-2-3 | AA-2-4 |
| 3 | AA-3-1 | AA-3-2 | AA-3-3 | AA-3-4 |
表2
| id | Column2 | Column4 |
--------------------------
| 1 | ZZ-1-2 | ZZ-1-4 |
| 3 | ZZ-3-2 | ZZ-3-4 |
查询(1、2、3)中id为的记录应返回:
| id | Column1 | Column2 | Column3 | Column4 |
----------------------------------------------
| 1 | AA-1-1 | ZZ-1-2 | AA-1-3 | ZZ-1-4 |
| 2 | AA-2-1 | AA-2-2 | AA-2-3 | AA-2-4 |
| 3 | AA-3-1 | ZZ-3-2 | AA-3-3 | ZZ-3-4 |
有没有可能提出这样的疑问?提前谢谢
SELECT table1.id, Column1, IFNULL(table2.Column2, table1.Column2),
column3, IFNULL(table2.Column4, table1.Column4)
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE (table1.id IN (1,2,3))
IFNULL(a,b)
转换为IF(a为NULL),则b为else a
-如果第一个参数为NULL,则返回第二个参数,否则返回第一个参数。可以添加为第2列,第4列