完整JOIN MySQL Query返回空

时间:2013-12-11 20:05:11

标签: mysql

所以这是一个MySQL查询:

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

它返回一个空的结果集,它应该根据下表返回四个结果。

第一张表:LoggedCarts - 列:Bill-Email

casedilla@hotmail.com
crazyandy@theholeintheground.com

第二张表:TestSite - 专栏:电子邮件

samuel@lipsum.com
taco@flavoredkisses.com
honeybadger@dontcare.com
casedilla@hotmail.com
messingwith@sasquatch.com

目标是获取一个MySQL语句,该语句返回Table:TestSite中与表中的行不匹配的行:LoggedCarts。

注意:我知道在构造查询时,在列名中使用连字符需要特别小心,包括反引号告诉MySQL有特殊字符。我会更改列名称以匹配,但是Table:LoggedCarts的数据通过邮件从Yahoo购物车中提供,并且在插入之前没有繁重的准备将名称设置为任何内容,但是在帖子数据中发送的密钥是令人生畏的。

但是,如果事实证明在插入之前重建数据比使用JOIN语句更容易,或者出于某种原因使用具有不同名称的两列,因为比较列只是不起作用,我将通过并重建数据库和PHP代码。

2 个答案:

答案 0 :(得分: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”。

答案 1 :(得分:0)

在一些研究的启发下,我发现了我在寻找的解决方案:SELECT * WHERE NOT EXISTS

我确实需要它做什么,作为奖励,我喜欢使用的简写语法,它允许您为表名添加别名并在整个语句中使用别名。

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