MySQL 子查询简单 SELECT 问题
MySQL Subquery simple SELECT issue
美好的一天,
我有以下查询。
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
);
还是没用。
当我 运行 直接在预订 table 上进行较小的查询以检查它是否有任何结果时,我得到 168 个结果
SELECT * FROM `panel_bookings` WHERE `booking_code` != '' AND `booking_day` LIKE '2015-03%' AND `booking_cancel` = 0
所以我还是做错了...
您有一个 returns 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
);
此外,不要使用 LIKE
作为日期。 LIKE
用于字符串,MySQL 有很多函数可以处理日期。
美好的一天,
我有以下查询。
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
);
还是没用。
当我 运行 直接在预订 table 上进行较小的查询以检查它是否有任何结果时,我得到 168 个结果
SELECT * FROM `panel_bookings` WHERE `booking_code` != '' AND `booking_day` LIKE '2015-03%' AND `booking_cancel` = 0
所以我还是做错了...
您有一个 returns 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
);
此外,不要使用 LIKE
作为日期。 LIKE
用于字符串,MySQL 有很多函数可以处理日期。