mysql SFW SQL QUERY字段不明确

4sup72z8  于 2023-02-28  发布在  Mysql
关注(0)|答案(2)|浏览(133)

我正在尝试运行一个查询,引用3个表,并从一个表返回一个字段。我收到一个错误,说模糊字段,即使我已经尝试确定列表。我不确定整个代码,因为我不能得到过去的模糊错误,以测试我到目前为止。
编辑:字段列表中的列“supplier_id”不明确,这是我收到的错误

Select supplier_id, company_name, country, sales_contact_name, email
FROM SUPPLIER, COFFEE, COFFEE_SHOP
Where SUPPLIER.supplier_id = COFFEE.supplier_id 
and COFFEE.shop_id=COFFEE_SHOP.shop_id 
and COFFEE_SHOP.city = "XXX";
1cosmwyk

1cosmwyk1#

简而言之,输出默认为3个表的所有列,当我们指定输出列时,如果多个输入表中存在相同的列名,我们需要以[table_alias].[column_name]格式显式告诉查询引擎。
根据您的DB引擎,提供的查询将生成一个乘积连接,这非常消耗资源且效率低下。
您可以将查询重写如下:

SELECT 
    SUPPLIER.supplier_id, 
    company_name, 
    country, 
    sales_contact_name, 
    email
FROM SUPPLIER
JOIN COFFEE
ON SUPPLIER.supplier_id = COFFEE.supplier_id
JOIN
COFFEE_SHOP
ON
COFFEE.shop_id=COFFEE_SHOP.shop_id 
and COFFEE_SHOP.city = "XXX"
xytpbqjk

xytpbqjk2#

除了始终写出连接之外,您还应该始终在任何复杂到需要连接的查询中使用表或视图的别名。

SELECT s.supplier_id, company_name, country, sales_contact_name, email
FROM SUPPLIER s
INNER JOIN COFFEE c ON c.supplier_id = s.supplier_id
INNER JOIN COFFEE_SHOP cs ON cs.shop_id = c.shop_id
WHERE cs.city = 'XXX';

另外,SQL语言喜欢用单引号而不是双引号来表示字符串文字,尽管不是所有的数据库都遵循这一点,但ANSI标准实际上保留了对象名称的双引号。这意味着最初编写的"XXX"文字很可能被解释为表或视图的名称,而不是字符串值。

相关问题