MYSQL从"得到"的所有结果

时间:2017-05-17 10:29:13

标签: mysql

我有这样的表

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 '%' )

这个选择不会返回伦敦......

3 个答案:

答案 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。 因此,它无法查询所有城市。