2013-12-11 100 views
0

因此,這裏是一個MySQL查詢:全JOIN MySQL查詢將返回空

SELECT TestSite . * , LoggedCarts . * 
FROM TestSite, LoggedCarts 
WHERE TestSite.email = 'LoggedCarts.Bill-Email' 
LIMIT 0 , 30 

它返回一個空的結果集,當它應該基於下面的表中返回四個結果。

第一個表:LoggedCarts - 柱:比爾 - 電子郵件

[email protected] 
[email protected] 

二表:測試網站 - 柱:電子郵件

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

的目標是獲得該表返回行的MySQL的聲明:與Table:LoggedCarts中的行不匹配的TestSite。

注意:我知道在構建查詢時需要特別小心在列名中使用連字符,涉及反引號以告訴MySQL有特殊字符。我將更改列名稱以匹配,但是Table:LoggedCarts通過雅虎購物車中的發佈提供數據,並且在插入之前沒有進行繁重的準備,將名稱設置爲任何內容,但是發送數據中發送的密鑰令人望而生畏。

但是,如果事實證明在插入之前重建數據比使用JOIN語句更容易,或者出於某種原因,使用兩個具有不同名稱的列作爲比較列只是不起作用,我將通過並重建數據庫和PHP代碼。

+1

是「LoggedCarts.Bill-Email」應該是一個字符串? – Don

+1

您可能已經回答了您自己的問題'......在構建查詢時特別注意,涉及'**反引號**'告訴MySQL有特殊字符。「#: – MonkeyZeus

+0

請停止使用SQL Server標記MySQL問題。 –

回答

0

按照給定的位由暗示的somne​​啓發的研究,我發現我一直在尋找這裏的解決方案:SELECT * WHERE NOT EXISTS

不正是我需要做的,作爲獎勵,我很喜歡使用的簡寫語法允許您爲表名添加別名並在整個語句中使用別名。

SELECT * 
FROM TestSite e 
WHERE NOT EXISTS 
    (
    SELECT null 
    FROM LoggedCarts d 
    WHERE d.`Bill-Email` = e.email 
    ) 
3

單引號表示字符串文字。您需要使用反引號標識符。而且,標識符的每個組件都必須單獨引用。

SELECT TestSite . * , LoggedCarts . * 
FROM TestSite, LoggedCarts 
WHERE TestSite.email = LoggedCarts.`Bill-Email` 
LIMIT 0 , 30 

the manual

如果多部分名稱的任何組件需要引用,引用單獨他們,而不是引用的名字作爲一個整體。例如,寫`my-table`.`my-column`,而不是`my-table.my-column`。

+0

反引號導致未知列錯誤。撇號允許連接發生,但LoggedCarts中的值全部爲NULL。 –

+0

對不起,我做錯了。我糾正了我的答案。 – depquid

+0

這樣做了,現在我只需要用!=或<>運算符來反轉它。謝謝! –