0

我有 2 个表格,即下面的客户和产品是否有定义

顾客

  • customer_id.
  • customer_name.

产品

  • product_id.
  • product_name.

客户表填充如下

customer_id |customer_name
----------------------------
1          |  abc
----------------------------
2          |  efg
------------------------------

产品表填充如下

product_id|product_name
------------------------------
1          |  chair
-----------------------------
2          |  desk
------------------------------

当我运行以下查询时

SELECT customer_id FROM customer WHERE customer_id IN (SELECT customer_id FROM product)

我的期望是它会在产品表中抱怨 no column customer_id 错误,而不是这个查询返回客户表的所有行。谁能解释这里发生了什么?为什么子选择使用父查询中的表并从中返回结果而不抱怨?

4

1 回答 1

0

这是因为customer_id在子查询中是非限定列并且不使用任何别名引用。然后 MySQL 在这种情况下搜索该列的表引用,因此,它被解析为表中的customer_idcustomer

在这些情况下应使用别名,如下所示:

SELECT c.customer_id 
FROM customer AS c 
WHERE c.customer_id IN (SELECT p.customer_id FROM product as p)

在这种情况下,您将收到您正在寻找的错误:D

于 2017-09-18T21:55:47.937 回答