我有这样的表
table_city
id - name
1 - rome
2 - london
3 - paris
table_category
id - id_city - category
1 - 1 - red
2 - 1 - blue
3 - 3 - red
然后我需要在类别选择上选择城市... 这是我的查询
SELECT * FROM table_city WHERE id IN (
SELECT id_city FROM table_category WHERE category LIKE 'red' )
这项工作......但是,如果我想要所有的城市呢?
SELECT * FROM table_city WHERE id IN (
SELECT id_city FROM table_category WHERE category LIKE '%' )
这个选择不会返回伦敦......
答案 0 :(得分:1)
Select
未返回伦敦:
SELECT id_city FROM table_category WHERE category LIKE '%'
table_category
列包含1, 1, 3
,其中没有2
的条目,即伦敦。这就是你没有去伦敦的原因。
要解决此问题,请将表left join
保留在左侧,使用table_city
代替内部查询。
答案 1 :(得分:0)
在table_category的示例数据中,没有记录将id_city映射到伦敦,因此您无法通过查询查看london SELECT * FROM table_city WHERE id IN( SELECT id_city FROM table_category WHERE category LIKE'%') 如果我们打破查询
SELECT id_city FROM table_category WHERE category LIKE'%'将返回1,1,3
SELECT * FROM table_city WHERE id IN(1,1,3)将返回罗马和巴黎
答案 2 :(得分:0)
您的第一个查询返回值
+----+-------+
| 1 | rome |
| 3 | paris |
您的内部查询返回值
+--------+
| 1 |
| 3 |
+--------+
您对table_city的内部查询没有任何关联, 因为id_city列中没有'2'条目。 即使你选择了category-blue ..它仍然会显示rome作为id_city,它只与table_city中的Rome匹配1。 因此,它无法查询所有城市。