首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL子查询简单选择问题

MySQL子查询简单选择问题
EN

Stack Overflow用户
提问于 2015-07-10 11:51:49
回答 1查看 28关注 0票数 1

日安,

我有以下查询。

代码语言:javascript
复制
SELECT `codeusage_id` FROM `panel_codeusage` 
WHERE `codeusage_exactdate` LIKE '2015-03%'

这就产生了178项结果。

但我想知道哪种代码用法与活动预订相关联。所以我写了这个子查询。

代码语言:javascript
复制
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)

但这并没有给我任何结果。有人能告诉我我做错了什么吗?

我编辑了这个查询如下:

代码语言:javascript
复制
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个结果。

代码语言:javascript
复制
SELECT * FROM `panel_bookings` WHERE `booking_code` != '' AND `booking_day` LIKE '2015-03%' AND `booking_cancel` = 0 

所以我还在做错事..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 11:54:14

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

代码语言:javascript
复制
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
              );

此外,不要将LIKE用于日期。LIKE用于字符串,而MySQL有大量处理日期的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31340075

复制
相关文章

相似问题

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