我有像这样的mysql查询
SELECT id, dpost FROM uid1088_qposts
UNION
SELECT id, dpost FROM uid1091_qposts
WHERE DATE(dpost)='2012-01-01'
但是dpost列是一个日期时间列,它存储像这样的数据
2012-01-12 11:55:43
查询显示没有错误但产生错误的输出
无论如何我可以在这种过滤中使用where子句结合两个表吗? 这两个表没有统一...只有第一个查询表显示其数据并过滤错误的日期
答案 0 :(得分:7)
在这种情况下,您可以使用子查询 -
SELECT * FROM (
SELECT id, dpost FROM uid1088_qposts
UNION
SELECT id, dpost FROM uid1091_qposts
) t
WHERE DATE(dpost)='2012-01-01';
答案 1 :(得分:3)
在您的情况下,您的代码被解释为:
(SELECT id, dpost FROM uid1088_qposts)
UNION
(SELECT id, dpost FROM uid1091_qposts WHERE DATE(dpost)='2012-01-01')
如果您想过滤所有行,请使用
(SELECT id, dpost FROM uid1088_qposts WHERE DATE(dpost)='2012-01-01')
UNION
(SELECT id, dpost FROM uid1091_qposts WHERE DATE(dpost)='2012-01-01')
答案 2 :(得分:2)
如果要限制两个表的结果,请在两个查询中添加WHERE
子句。
UNION
只需将一个查询的结果附加到另一个查询的结果中。
答案 3 :(得分:1)
代码中的WHERE
子句仅适用于union中的第二个查询,而不是两者。要将它应用于两者,您需要同时使用它:
SELECT id, dpost FROM uid1088_qposts
WHERE DATE(dpost) = '2012-01-01'
UNION
SELECT id, dpost FROM uid1091_qposts
WHERE DATE(dpost) = '2012-01-01'
答案 4 :(得分:0)
SELECT AllRecords.`ID`, AllRecords.`dPost`
(SELECT `ID`, `dPost` FROM uid1088_qposts
UNION
SELECT `ID`, `dPost` FROM uid1091_qposts) as AllRecords
FROM AllRecords
WHERE DATE(dpost)='2012-01-01';