![](/img/trans.png)
[英]MySQL: execute the second query only if the first query doesn't return result
[英]How to execute second query based on first query result
我有一種情況,我需要根據第一個query
結果execute
第二個 query
。
這是我的第一個查詢結果:
id current_date starts_on ends_on Product_id days_remaining
1 2017-06-21T12:00:00 2017-06-20T12:00:00Z 2017-06-23T12:00:00Z 3 2
2 2017-06-21T12:00:00 2017-06-01T12:00:00Z 2017-06-03T12:00:00Z 4 0
3 2017-06-21T12:00:00 2017-06-01T12:00:00Z 2017-06-03T12:00:00Z 7 0
4 2017-06-21T12:00:00 2017-07-01T12:00:00Z 2017-07-03T12:00:00Z 5 12
在這里你可以看到remaining_days
有2 個零(0)作為對occurence結果,我想所有product_name
從product
表
我的表格和以上查詢結果均已實現,但未獲得product_name。 請在這里幫助我
這是我的sqlfiddle: http ://sqlfiddle.com/#!9/5bf34/1
我的問題:如果days_remaining
(請參見上面的結果)為0,我想獲取所有product_name
簡而言之,如果days_remaining為0,則獲取所有product_name
您可以使用以下解決方案:
SET @mycurrentDate = '2017-06-21T12:00:00';
SELECT p.product_name, tn.* FROM (
SELECT
id,
@mycurrentDate AS `current_date`,
`tn`.`start` AS `starts_on`,
`tn`.`end` AS `ends_on`,
`tn`.`product_id` AS `Product_id`,
IF(`tn`.`end` >= @mycurrentDate, DATEDIFF(`tn`.`end`, @mycurrentDate), 0) AS `days_remaining`
FROM `booking` AS `tn`
)tn LEFT JOIN product p ON tn.`Product_id` = p.product_id AND tn.`days_remaining` = 0
-- WHERE tn.days_remaining = 0
說明:
我將您的查詢包裝到FROM
和LEFT JOIN
,結果以其標識product_id
代表表product
。 另外,僅當days_remaining
為零時, LEFT JOIN
才匹配。
如果要過濾結果以僅顯示具有product_name
的記錄,則必須在此解決方案的末尾添加以下行: WHERE tn.days_remaining = 0
。
您可以在這樣的WHERE中這樣做:
SELECT
tn.id,
p.product_name,
@mycurrentDate AS `current_date`,
`tn`.`start` AS `starts_on`,
`tn`.`end` AS `ends_on`,
`tn`.`product_id` AS `Product_id`
FROM `booking` AS `tn`
JOIN product as `p` on p.product_id = tn.product_id
WHERE IF(`tn`.`end` >= @mycurrentDate,
DATEDIFF(`tn`.`end`, @mycurrentDate), #show days until event ends
0 #the event has already passed
) = 0
小提琴: http ://sqlfiddle.com/#!9/5bf34/25
編輯:不完全是第二個查詢,而是您要查找的結果。
使用您自己的查詢,我對其進行了擴展:
#assume this is the date as NOW()
SET @mycurrentDate = '2017-06-21T12:00:00';
SELECT * FROM product WHERE product_id IN (
SELECT product_id FROM (
SELECT
id,
@mycurrentDate AS `current_date`,
`tn`.`start` AS `starts_on`,
`tn`.`end` AS `ends_on`,
`tn`.`product_id` AS `Product_id`,
IF(`tn`.`end` >= @mycurrentDate,
DATEDIFF(`tn`.`end`, @mycurrentDate), #show days until event ends
0 #the event has already passed
) AS `days_remaining`
FROM `booking` AS `tn`
) tmp1
WHERE `days_remaining` = 0
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.