在联合查询中使用Where子句

时间:2012-01-12 08:19:45

标签: mysql

我有像这样的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

查询显示没有错误但产生错误的输出

its a query done in phpMyAdmin

无论如何我可以在这种过滤中使用where子句结合两个表吗? 这两个表没有统一...只有第一个查询表显示其数据并过滤错误的日期

5 个答案:

答案 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';