有两张表t1和t2,t1和t2两张表大部分字段都相同但是t2比t1多了一个status状态字段,现在需要将两个表合起来查询,且要求设置t1表所有信息的status状态都为00。如果两张表有id重复的数据则展示t2数据库中的信息,该如何书写sql
时间: 2024-11-24 22:41:18 浏览: 8
Mysql数据库+多表之间的数据同步SQL语句+多字段排序语句
你可以使用SQL的UNION ALL操作符来合并两张表,并通过CASE语句设置t1表的状态。如果你想要优先显示t2表的信息,当id在两表中存在重复时,则可以这样编写:
```sql
SELECT id,
CASE WHEN t1.id IS NULL THEN t2.*
ELSE COALESCE(t1.*, (SELECT * FROM t2 WHERE t2.id = t1.id AND t1.status = 0)) -- 如果t1的status为00,则保留;否则取t2的信息
END AS combined_data
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT id,
t2.*
FROM t2
WHERE NOT EXISTS (SELECT 1 FROM t1 WHERE t1.id = t2.id)
```
这个查询首先做了一个左连接(t1 LEFT JOIN t2),然后在结果集中检查t1是否存在。如果id在t1中并且status为00,就保留t1的所有列;否则,从t2中选择对应的数据。同时,还包含了一个UNION ALL后的部分,用于处理只有在t2中存在的id。
阅读全文