从子查询中获取选择值

问题描述:

下面是一个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') 
+0

并且还定义了表用户别名**来自用户的一个** –

+0

@BerndBuffen。正确..谢谢答案更新 – scaisEdge

周围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,则根本不会从查询返回任何行。