下面是一个sql查询,用于获取已添加联系人详细信息的用户列表。以下查询似乎工作正常。但唯一的问题是图像值总是返回NULL
我尝试使用子查询对图像链接进行成像。除图像链接外,其他任何工作都有效。
SELECT a.id,a.name,a.address,a.image_id,(select url
from meta_details b
where b.p_id = 'a.image_id'
and b.meta_val='profile_pic') as image
FROM users
WHERE a.user_id NOT IN (SELECT user_id FROM details where contact_id != '$cid')
我不确定这是否是正确的方法,是否可以使图片网址有效?
答案 0 :(得分:2)
你应该删除a.image_id周围的引号(否则你不会在字段上加入条件,而是字符值'a.image_id'
的联接失败,因为不匹配)
SELECT
a.id
,a.name
,a.address
,a.image_id
,(select url
from meta_details b
where b.p_id = a.image_id and b.meta_val='profile_pic' ) as image
FROM users a
WHERE a.user_id NOT IN (SELECT user_id FROM details where contact_id != '$cid')
答案 1 :(得分:0)
此类查询也可以用join
操作表示:
select u.*, md.url as image
from users u left join
meta_details md
on md.p_id = u.image_id and
md.meta_val = 'profile_pic' left join
details d
on d.user_id = u.user_id and d.contact_id <> '$cid'
where d.user_id is null;
这种方法的优点是SQL优化器有可能产生更好的优化计划。此外,NOT IN
是危险的,因为如果子查询中的任何行返回NULL
,则查询中不会返回任何行。