社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

有没有更快更好的方法来执行这个mysql查询?

Ninet9 • 6 年前 • 1547 次点击  

假设我有两张桌子。项目和存储。
它们之间按项目ID有关系。
我要的是列出所有在仓库里找不到关系的物品
我预感我的陈述可能比这简单得多:

SELECT item.name,storage.stuff 
FROM item 
LEFT JOIN storage ON storage.item_id=item.id 
WHERE storage.stuff IS NULL 
GROUP BY item.id 

是否有方法将左联接替换为其他联接,以便返回无需联接的项?
(实际上,我想保持stuff字段的返回,即使它总是空的,因为我有一个查询函数,它通过ajax为clientside提供服务,有很多方法可以列出这些项,而且我不想检查这个字段是否存在,也不想在获取部分检查它)

Table Item
id     name
1       a
2       b
3       c
4       d

Table Storage
item_id      stuff
1             this
1             that
2             this  

预期结果:

item_id     item_name     stuff
   3           c           NULL
   4           d           NULL
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40710
文章 [ 2 ]  |  最新文章 6 年前
Raymond Nijland
Reply   •   1 楼
Raymond Nijland    6 年前

有更多的方法…

左连接方法

查询

SELECT
    Item.id
  , Item.name
  , Storage.stuff 
FROM
  Item 
LEFT JOIN
  Storage
ON
  Storage.item_id = Item.id 
WHERE
  Storage.stuff IS NULL

不存在方法

查询

SELECT
   Item.id
 , Item.name
 , NULL AS stuff
FROM 
 Item
WHERE
 NOT EXISTS (
  SELECT 
   1
  FROM 
   Storage
  WHERE 
   Storage.item_id = Item.id
)

不在方法中

查询

SELECT
   Item.id
 , Item.name
 , NULL AS stuff
FROM 
 Item
WHERE
 Item.id NOT IN (
    SELECT 
     Storage.item_id
    FROM 
     Storage
    WHERE 
      Storage.item_id = Item.id     
 )

参见演示 https://www.db-fiddle.com/f/phKyPgvGJpZ5x1Lj6sisCd/0

Madhur Bhaiya
Reply   •   2 楼
Madhur Bhaiya    6 年前

你不需要使用 Group By 在查询中,当您获取在 storage 表。你的 Group BY 也不是有效的ANSI SQL,因为在 Select 条款。

SELECT item.id, item.name, storage.stuff 
FROM item 
LEFT JOIN storage ON storage.item_id=item.id 
WHERE storage.stuff IS NULL