首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将not在子查询中转换为联接

将not在子查询中转换为联接
EN

Stack Overflow用户
提问于 2018-03-19 21:24:44
回答 2查看 131关注 0票数 0

我不确定在查询中丢失了什么,在查询中,我试图将not在子查询中转换为join。

下面是我最初的查询,非常适合我:

代码语言:javascript
复制
select 
  battery_id
from 
  battery_price
where 
clinic_id = 2
and battery_id not in 
(
    select battery_id
    from battery_price
    where clinic_id = 4569
) 
;

下面是我正在尝试的查询,由于它没有给出任何空字段,所以它无法工作:

代码语言:javascript
复制
select leftq.battery_id as leftf, rightq.battery_id as rightf
from
    (
    select 
      battery_id
    from 
      battery_price 
    where
        clinic_id = 2
    ) as leftq
left join 
        (
            select battery_id
            from battery_price
            where clinic_id = 4569
        )  as rightq
on rightq.battery_id = leftq.battery_id
;

以下是表模式:

代码语言:javascript
复制
CREATE TABLE `battery_price` (
  `battery_price_id` int(11) NOT NULL AUTO_INCREMENT,
  `clinic_id` int(11) NOT NULL DEFAULT '0',
  `battery_id` int(11) NOT NULL DEFAULT '0',
  `retail_price` decimal(10,2) NOT NULL DEFAULT '0.00',
  `actual_cost` decimal(10,2) NOT NULL DEFAULT '0.00',
  `provider_cost` decimal(10,2) NOT NULL DEFAULT '0.00',
  `in_use` tinyint(1) NOT NULL DEFAULT '1',
  `sales_tax_id1` int(11) NOT NULL DEFAULT '0',
  `sales_tax_id2` int(11) NOT NULL DEFAULT '0',
  `sales_tax_id3` int(11) NOT NULL DEFAULT '0',
  `sales_tax_id4` int(11) NOT NULL DEFAULT '0',
  `sales_tax_id5` int(11) NOT NULL DEFAULT '0',
  `sales_tax_category_id` int(11) NOT NULL DEFAULT '0',
  `price_locked` tinyint(1) NOT NULL DEFAULT '1',
  `item_number` varchar(50) NOT NULL DEFAULT '',
  `last_update` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `last_edit_user_id` int(11) DEFAULT '0',
  PRIMARY KEY (`battery_price_id`),
  KEY `battery_id` (`battery_id`),
  KEY `battery_id_2` (`battery_id`),
  KEY `battery_id_3` (`battery_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2639 DEFAULT CHARSET=latin1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-19 21:37:23

试试这个:

代码语言:javascript
复制
select
  t.battery_id
from 
  battery_price t
left outer join battery_price u
  on t.battery_id = u.battery_id
 and u.clinic_id = 4569
where t.clinic_id = 2
and u.battery_id is NULL
票数 3
EN

Stack Overflow用户

发布于 2018-03-19 21:36:22

虽然我不太清楚为什么要选择NULL列(如果不选择,只需省略逗号之后的第二列),但我认为这个查询解决了您的问题:

代码语言:javascript
复制
select battery_price.battery_id as leftf, rightq.battery_id as rightf
from battery_price left join 
(
  select battery_id
  from battery_price
  where clinic_id = 4569
) as rightq
on rightq.battery_id = battery_price.battery_id
where battery_price.clinic_id = 2 and rightq.battery_id is null;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49372576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档