MySQL 子查询简单的 SELECT 问题

标签 mysql subquery

你好,

我有以下查询。

SELECT `codeusage_id` FROM `panel_codeusage` 
WHERE `codeusage_exactdate` LIKE '2015-03%'

这给出了 178 个结果。

但我想知道哪些代码使用与有效预订相关联。 所以我写了这个子查询。

SELECT `codeusage_id` FROM `panel_codeusage` A
WHERE `codeusage_exactdate` LIKE '2015-03%' AND 
(SELECT `booking_cancel` FROM `panel_bookings` B
WHERE  A.`codeusage_link` = B.`booking_id` AND `booking_cancel` = 0)

虽然这没有给我任何结果。 谁能告诉我我做错了什么?

我已将查询编辑为如下所示:

SELECT `codeusage_id` FROM `panel_codeusage` A
WHERE `codeusage_exactdate` >= '2015-03-01' AND 
       codeusage_exactdate < '2015-04-01'
       EXISTS (SELECT 1
               FROM `panel_bookings` B
               WHERE  A.`codeusage_link` = B.`booking_id` AND
                     `booking_cancel` = 0
              );

还是不行。

当我直接在预订表上运行一个较小的查询来检查它是否有任何结果时,我得到了 168 个结果

SELECT * FROM `panel_bookings` WHERE `booking_code` != '' AND `booking_day` LIKE '2015-03%' AND `booking_cancel` = 0 

所以我还是做错了......

最佳答案

您有一个返回 0 的子查询,MySQL 将其解释为 false。您需要 EXISTS:

SELECT `codeusage_id` FROM `panel_codeusage` A
WHERE `codeusage_exactdate` >= '2015-03-01' AND 
       codeusage_exactdate < '2015-04-01' AND
       EXISTS (SELECT 1
               FROM `panel_bookings` B
               WHERE  A.`codeusage_link` = B.`booking_id` AND
                     `booking_cancel` = 0
              );

此外,不要对日期使用 LIKELIKE 用于字符串,MySQL 有很多函数可以处理日期。

关于MySQL 子查询简单的 SELECT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340075/

相关文章:

mysql - 两个mysql查询的区别

MySQL - 连接在同一个表上?

mysql - 替换包含特定字符串 mysql 的整列文本

mysql - 在大表上运行 ALTER 迁移的建议

php - 如何选择更多条件的用户

java - 结果集结束后

javascript - PHP、JavaScript 和 MySQL : updating and passing of variables

java - DAO Java 中的子查询

php - 1 选择查询根据 2 列对行进行排序?

MySQL - 子查询的 max( ) 行值