从子查询中获取选择值

时间:2017-02-19 20:50:27

标签: mysql sql

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

我不确定这是否是正确的方法,是否可以使图片网址有效?

2 个答案:

答案 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,则查询中不会返回任何行。