所以这是一个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代码。
答案 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
)