我有以下查询,它工作正常,没有问题
SELECT description category,
details,
created_by,
CONCAT(name,' ',surname) name,
FROM_UNIXTIME(createdon) created_date,
FROM_UNIXTIME(updatedon) updated_date,
comments_count,
entry_id,
code car_code
FROM my_area_details,my_user,my_master_area_categories
WHERE type=4
AND code IN ( SELECT car_code
FROM my_cars
WHERE car_company='GM'
AND car_model='Chevy')
AND my_area_details.created_by=my_user.user_id
AND my_area_details.category=my_master_area_categories.type_id
ORDER BY category
在上面的查询中,下面的子查询只返回一个值或什么都没有
SELECT car_code
FROM my_cars
WHERE car_company='GM'
AND car_model='Chevy'
在第一次查询中,如果我的其他表没有任何匹配的记录,我会得到零记录。
我的要求是如果子查询有值并且主查询没有返回任何记录(由于在其他表中找不到记录),我至少应该从my_cars获取car_code的值(其他值可以为NULL)
为此,我尝试将子查询添加为别名表,并确实与该别名表保持连接, 但由于我有其他条件,我仍然没有得到汽车代码。也尝试加入另外三个表,结果左边连接my_car表。但是这个花费时间,因为我没有检查第一级查询中的汽车代码
任何方式加入并从my_cars表中获取car_code,即使我的其他表没有任何匹配的东西......?
答案 0 :(得分:3)
您可以再次连接其余表car_code
,从而使car_code成为主要查询。
或者直接加入car_code
到您当前的查询,这基本上具有相同的效果,但我建议不要混合左连接和右连接。
问题是你总是需要一个car_code,否则你不会得到其他数据(你现在遇到同样的问题,但反过来说),但是当我阅读你的要求时,这应该不是问题:
我强烈建议您在表中使用更一致的字段名称,并使用INNER和LEFT连接以及表别名来提高可读性。您的查询可能看起来像这样,虽然它不完整,因为我不知道您的表之间的确切关系。
SELECT description category,
details,
created_by,
CONCAT(name,' ',surname) name,
FROM_UNIXTIME(createdon) created_date,
FROM_UNIXTIME(updatedon) updated_date,
comments_count,
entry_id,
code car_code
FROM car_code cc
LEFT JOIN my_area_details ad ON ad.code = cc.car_code
AND ad.type = 4
LEFT JOIN my_user u ON u.user_id = ad.created_by
LEFT JOIN my_master_area_categories mac ON mac.type_id = ad.category
WHERE car_code.car_company = 'GM'
AND car_code.car_model = 'Chevy'
ORDER BY category