2012-02-11 91 views
-2

此查詢不起作用。我想要一個LEFT JOIN的所有結果,其中有一些東西。這是我的確切代碼:MySQL從左側選擇全部加入

SELECT * FROM `swarovski_zones` WHERE `siteid`='200' 
LEFT JOIN `trafficviews` ON `swarovski`.`id`=`trafficviews`.`adid` 

swarovski_zonesSITEID 200

trafficviews的AdID 200

的200表之間鏈接的變量。我想要的一切,從兩個表其中ID爲200

+0

「不起作用」>。< – 2012-02-11 23:38:08

+0

除了sintatic錯誤之外,您還有語義錯誤。你只能從'左邊的表中獲得'id'是200'的所有東西。你需要一個外部連接來從ID爲200的兩個表中獲得'一切' – 2012-02-11 23:56:28

+0

如果'swarovski_zones'中的id **可能不存在,並且它可能只存在於'trafficviews'中,那麼你應該不接受我的答案並接受@MattyMostacho的人,他對這種情況有正確的認識。 – Ben 2012-02-12 12:03:57

回答

6

查詢不起作用,因爲語法不正確。它應該是:

select 
from 
join 
on 
where 
group by 
having 
order by 
limit 

給你:

select * 
    from `swarovski_zones` 
    left join `trafficviews` 
    on `swarovski`.`id` = `trafficviews`.`adid` 
where `siteid` = '200' 

siteid意味着是一個字符串,而不是一個整數?

我可能會後悔提供上述列表...

Limit!我忘了Limit;完整的語法列表是here

+0

感謝這個工作,但是在我的表中,我看到兩個字段「ID」他們是兩個表相同的自動生成的主鍵ID ..所以行有他們在..會影響它 - 我有兩個ID列? – TheBlackBenzKid 2012-02-11 23:41:51

+0

Thu'JOIN'和'ON'是'FROM'子句的一部分。就像可能出現在WHERE子句中(或在'HAVING'或...)中的AND和OR'一樣。 – 2012-02-11 23:42:30

+1

正如我所說@ypercube;我會後悔提供名單:-)。當OP出現問題時,我似乎錯過了「加入」。 – Ben 2012-02-11 23:44:01

1

用戶全外連接

SELECT * FROM `swarovski_zones` WHERE `siteid`='200' 
FULL OUTER JOIN `trafficviews` ON `swarovski`.`id`=`trafficviews`.`adid` 
+1

MySQL中沒有'FULL OUTER JOIN'。這不是查詢的問題。 – 2012-02-11 23:35:08

+0

http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/ – 2012-02-11 23:39:22

+0

在那篇文章中沒有任何一點是寫完全外連接一個選擇語句。 – Ben 2012-02-11 23:47:24

1

這裏的問題是右表(trafficviews)中的元素在左表(swarovski_zones)中可能沒有相應的行。所以左連接將從左邊獲取所有元素,並可能會遺漏右邊的一些元素。

要解決這個問題,你需要一個外連接。你的問題是,MySQL不支持外部聯接:)這是在下面的一般方法解決:

SELECT * FROM a LEFT JOIN b ON a.id = b.id 
UNION ALL 
SELECT * FROM a RIGHT JOIN b ON a.id = b.id WHERE a.id IS NULL; 

應用到你的問題,這應該是這樣的:

SELECT * FROM swarovski_zones s 
LEFT JOIN trafficviews ON s.id = t.adid 
UNION ALL 
SELECT * FROM swarovski_zones s 
RIGHT JOIN trafficviews ON s.id = t.adid WHERE s.id IS NULL 
WHERE s.siteid = 200 or t.adid = 200 

試試看吧。

+0

謝謝,重申。 – TheBlackBenzKid 2012-02-11 23:48:11