[英]How to get already booked customers in MySQL query?
我有這個SQL提琴: http ://sqlfiddle.com/#!9/abe27/2
CREATE TABLE members
(`id` int, `memberName` varchar(7))
;
INSERT INTO members
(`id`, `memberName`)
VALUES
(1, 'Steve'),
(2, 'John'),
(3, 'Alex')
;
CREATE TABLE enquiry
(`id` int, `memberId` int, `enq_status` varchar(20))
;
INSERT INTO enquiry
(`id`, `memberId`, `enq_status`)
VALUES
(1, 1, 'Cancelled'),
(2, 1, 'Booked'),
(3, 3, 'Booked'),
(4, 2, 'Cancelled'),
(5, 3, 'Booked'),
(6, 3, ''),
(7, 2, ''),
(8, 1, '')
;
CREATE TABLE bookings
(`id` int, `enquiryId` int)
;
INSERT INTO bookings
(`id`, `enquiryId`)
VALUES
(1, 2),
(2, 3),
(3, 5)
;
我的查詢如下:
SELECT m.memberName, e.id, e.enq_status
FROM enquiry e,members m
WHERE e.memberId = m.id AND e.enq_status = '';
我在其中有members
, enquiry
和bookings
表。 在SQLFiddle中顯示的查詢中,我正在檢索未取消或預訂的查詢。
但是我想突出顯示或添加一列,這將告訴我們進行查詢的客戶之前是否已經預訂。
根據上面的小提琴,有什么解決方案,請告知!
您必須多次使用某些表,並且還必須使用LEFT JOIN
有條件地加入以前的預訂。
SELECT e.id, m.memberName, e.enq_status, COUNT(b.id) as booking_count
FROM enquiry e
JOIN members m ON (e.memberId = m.id)
LEFT JOIN enquiry e2 ON (e2.memberId = m.id)
LEFT JOIN bookings b on (b.enquiryId=e2.id)
WHERE e.enq_status = ''
GROUP BY e.id
order by booking_count desc;
enq_status=''
) JOIN
) LEFT JOIN
) LEFT JOIN
) GROUP BY
)計算找到的預訂數量 我想這就是你想要的。 除了計數( COUNT(b.id)
),您還可以使用任何其他指標,例如SUM(b.amount)
將總金額用作訂購因子,或者COUNT(b.id)*10 + SUM(b.amount)
,它是訂單數和總金額等的組合
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.