以下查询:
SELECT wp_users.*
FROM wp_users
INNER JOIN wp_usermeta AS mtct ON ( wp_users.ID = mtct.user_id )
WHERE not exists (select * from mtct where mtct.meta_key='City')
给了我
错误代码1146:表'.mtct'不存在。
我搜索过类似的问题,但我仍然看不出我做错了什么。我在centos 6.4上使用mysql 5.6.21。
答案 0 :(得分:0)
您无法在FROM
子句中使用表别名,您必须在那里使用真实的表名。
SELECT wp_users.*
FROM wp_users
INNER JOIN wp_usermeta AS mtct ON ( wp_users.ID = mtct.user_id )
WHERE not exists (select *
from wp_usermeta AS mtct1
where mtct1.meta_key='City')
这将解决错误,但我不确定它是否会为您提供所需的结果。子查询可能需要与主查询中的一个表相关联。也许这个:
SELECT wp_users.*
FROM wp_users
INNER JOIN wp_usermeta AS mtct ON ( wp_users.ID = mtct.user_id )
WHERE not exists (select *
from wp_usermeta AS mtct1
where mtct1.meta_key='City'
and mtct1.user_id = wp_users.ID)
但是,与wp_usermeta
加入似乎没有任何理由,因为您没有从该表中选择任何内容。这可能只是:
SELECT *
FROM wp_users
WHERE not exists (select *
from wp_usermeta AS mtct1
where mtct1.meta_key='City'
and mtct1.user_id = wp_users.ID)
这将返回City
中没有wp_usermeta
的所有用户。
答案 1 :(得分:0)
@Barmar解释了原因,你不能在from子句中使用别名,因为from子句必须有表名,下面的查询可以满足你的目的,如果表格庞大,可能会更快。
SELECT wu.*
FROM wp_users wu
LEFT JOIN wp_usermeta AS mtct ON wu.ID = mtct.user_id AND mtct.meta_key='City'
WHERE mtct.id IS NULL;