首页 > 解决方案 > 我正在处理 SQL 查询,但没有使用完整的外部联接

问题描述

我想在 SQL 上工作。内部连接不起作用。我正在使用两个表获取“city_id”字段上的数据这些表代码所以请帮助我

inventory
==========================================
inventory_id | city_id | title |is_enabled
==========================================
          1  |       1 |  abc  | 1
          2  |       1 | bcd   | 1



cities
====================================
city_id | city  | title
===================================
     1  | delhi |  abc
     2  | nodia |  bcd


   SELECT * FROM inventory i 

                INNER JOIN  cities c 

                ON i.city_id = c.city_id 

                WHERE i.is_enabled = 1 

                ORDER BY i.inventory_id DESC LIMIT 10;

标签: phpmysqlsqldatabase

解决方案


一些数据库(例如 MS Access 和 MySQL)不支持FULL OUTER JOIN.

但是,FULL OUTER JOIN很少需要 - 当您使用表之间定义的键时几乎不需要。结构良好的数据库具有具有适当值的键。

我怀疑 anINNER JOIN做你想做的事:

SELECT . . .   -- list out the columns you want
FROM inventory i INNER JOIN
     cities c
     ON i.city_id = c.city_id
WHERE i.is_enabled = 1
ORDER BY i.inventory_id DESC
LIMIT 10;

此查询假定inventory行具有有效的city_id. 如果有些是NULL(允许的、不匹配的值),您可以LEFT JOIN改用。

其他一些注意事项:

  • 明确列出您想要的列。特别是,重复的列名可能会产生问题。
  • 使用表别名,因此查询更易于编写和阅读。
  • 限定所有列名。我猜这is_enabled来自inventory. 我不应该猜测。
  • 不要在数字常量周围加上单引号。我猜这is_enabled是一个数字,而不是一个字符串。

推荐阅读