2012-01-12 73 views
1

我有一個MySQL查詢像這樣使用Where子句中的聯合查詢

SELECT id, dpost FROM uid1088_qposts 
UNION 
SELECT id, dpost FROM uid1091_qposts 
WHERE DATE(dpost)='2012-01-01' 

但爲dpost列是datetime列存儲這樣

2012-01-12 11數據:55:43

查詢顯示沒有錯誤,但產生錯誤的輸出

its a query done in phpMyAdmin

有無論如何我可以在這種過濾使用where子句聯合兩個表嗎? 這兩個表不合並......只有第一個查詢表顯示其數據並過濾錯誤日期

+0

請讓你的問題更清楚。你正在尋找的輸出是什麼? – redmoon7777 2012-01-12 08:23:15

+0

我想做一個像這樣的mysql查詢...我有兩個表來統一併通過對dpost列使用日期來使用where子句。但是dpost專欄是日期時間專欄 – 2012-01-12 08:25:04

回答

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') 
+0

對不起有效=) – 2012-01-12 08:44:55

1

代碼中的WHERE子句僅適用於聯合中的第二個查詢,而不是兩者。它同時適用於你需要既使用它:

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

在這種情況下,你可以使用子查詢 -

SELECT * FROM (
    SELECT id, dpost FROM uid1088_qposts 
    UNION 
    SELECT id, dpost FROM uid1091_qposts 
) t 
WHERE DATE(dpost)='2012-01-01'; 
+0

在製作'UNION'之前,應用條件**的效率不是很低嗎? – Tadeck 2012-01-12 08:32:50

+0

@Tadeck是的,這種方式效率較低,特別是在大桌子上。 – Devart 2012-01-12 08:41:06

+0

我喜歡這個解決方案,因爲它使優雅的代碼。處理器時間便宜,開發人員時間很昂貴:) – Gregology 2013-02-22 17:26:55

2

如果要限制兩個表的結果,則在兩個查詢中都要加上WHERE子句。

UNION只是將一個查詢的結果附加到另一個查詢的結果。

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