从子查询中获取选择值
问题描述:
下面是一个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')
我不确定这是否是正确的方式,是否有可能使其工作以获取图像url?
答
您应该删除(你有字面值'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')
答
周围a.image_id报价这种类型的查询可以也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
,则根本不会从查询返回任何行。
并且还定义了表用户别名**来自用户的一个** –
@BerndBuffen。正确..谢谢答案更新 – scaisEdge