2013-12-11 70 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

这样做了,现在我只需要用!=或<>运算符来反转它。谢谢! –