mysql - 转换不在子查询中加入

标签 mysql

我不确定我在尝试将不在子查询中转换为加入的查询中缺少什么。

这是我的原始查询,非常适合我:

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
) 
;

这是我正在尝试的查询,但它不起作用,因为它没有给我任何空字段:

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
;

这是表架构:

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

最佳答案

试试这个:

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

关于mysql - 转换不在子查询中加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49372576/

相关文章:

mysql - 如何减少在数据库中选择数据的时间负载

mysql - 一张表内的sql多条件

mysql - 在 MySQL 中查找最小辨别子集

php - 将变量放入 PDO 语句中

mysql - mysql 中 float 到日期

mysql - 使用 awk 或 sed 将 mysql.log 重新格式化为简单格式

mysql - 在 MySQL 中,我可以在删除后返回已删除的行吗?

asp.net - Prestashop:尝试解码密码

mysql - 计算某个值在表中出现的次数

mysql - 有趣的数据库架构场景