一個MySQL多表查詢的問題
一個MySQL多表查詢的問題
餐廳訂餐與用餐資料分析時遇到一個多表查詢問題,經過多方面請教,獲得了兩種解決方法,特此記錄下來
有三個MySQL資料表,表一:訂餐情況表tb_order,表二:消費流水錶tb_expend,表三:人員表tb_user
消費流水錶tb_expend
訂餐情況表tb_order
訂餐情況表tb_order說明:breakfast早餐訂餐情況,lunch午餐訂餐情況,值為1表示已訂餐,值為零或者沒有記錄表示未訂餐。Orderdate表示是訂的是哪一天的早餐午餐。
消費流水錶tb_expend:expens 消費金額。消費金額為5,表示去餐廳消費用過早餐,消費金額為20表示去餐廳消費用過午餐,expensdate是消費的日期。
想查詢幾種情況
查詢一:查詢出一週內所有預訂了午餐,但是沒有去餐廳用過午餐的人員,
查詢二:查詢出一週內所有去餐廳用過早餐,但是沒有預訂過早餐的人員
1 難點 ,例如查詢一:如何查詢出一週內所有預訂了午餐,但是”沒有“去餐廳用過午餐的人員,
這個問題有個關鍵因素是,lunch=1的時候,breakfast也有可能=1,因此expend=5的時候,並不一定是在結果裡面的。因為expend=5對應了breakfast=1的情況。
訂餐記錄是一條中包括了早餐和午餐的訂餐情況,兩個資訊
消費記錄一條中只包含一個資訊,消費是5元的話,說明去吃了早飯,消費是20元的話,說明是去吃了午飯,所以如果去吃了早飯+午飯的話,消費記錄會有兩條記錄,如果某一天早餐午餐都沒吃的話,就沒有這一天的消費記錄。
所以消費記錄要麼是沒有,要麼是expenses=5,要麼是expenses=20;
方法一(感謝ZJReason提供)
查詢一: 訂了午餐,沒來吃的人
SELECT * FROM tb_order a
LEFT JOIN tb_expend b ON (b.username=a.username AND b.expensdate =a.orderdate AND b.expens=20)
WHERE a.lunch=1 AND b.id IS NULL AND (a.orderdate BETWEEN ‘2020-11-1’ AND ‘2020-11-2’)
查詢二: 吃了早餐,沒有訂餐的人
SELECT * FROM tb_expend a
LEFT JOIN tb_order b ON (b.userid=a.userid AND b.orderdate=a.expensdate AND b.breakfast=1)
WHERE a.expens=5 AND b.id IS NULL AND (a.expensdate BETWEEN ‘2020/11/1’ AND ‘2020/11/2’)
方法二(感謝lxl8611提供)
查詢一: 訂了午餐,沒來吃的人
select * from tb_order a where lunch=1 and not exists(select 1 from tb_expend b where a.userid=b.userid and a.orderdate=b.expensdate and expens=20 ) ORDER by orderdate
查詢二: 吃了早餐,沒有訂餐的人
select * from tb_expend a where expens=5 and not exists(select 1 from tb_order b where a.userid=b.userid and a.expensdate=b.orderdate and breakfast=1)AND a.expensdate >=‘2020/11/1’ AND a.expensdate <=‘2020/11/2’ ORDER BY expensdate
根據實際情況修改了一點,原答案使用“date(orderdate)>= date(date_add(now(),INTERVAL -7 DAY))”語句來處理時間,先記錄下來找個時間學習一下用法。
相關文章
- 【MySQL】多表查詢MySql
- mysql多表查詢MySql
- MySQL 多表查詢MySql
- mysql 5.7.11查詢分割槽表的一個問題MySql
- mysql中的多表關聯查詢MySql
- mySQL多表查詢與事務MySql
- mysql多表查詢如何實現MySql
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- Java-MySql-函式、多表查詢JavaMySql函式
- 多表查詢
- SQL查詢的:子查詢和多表查詢SQL
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- MySQL讓人又愛又恨的多表查詢MySql
- 讓人又愛又恨的Mysql多表查詢MySql
- 深入sql多表差異化聯合查詢的問題詳解SQL
- 04多表查詢
- mysql多表多欄位查詢並去重MySql
- 關於 mysql 中的 rand () 查詢問題MySql
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- Oracle-多表查詢Oracle
- ORM多表查詢下ORM
- mysql新建表和多表查詢,關鍵字joinMySql
- Mysql資料庫之多表查詢、事務、DCLMySql資料庫
- JPA的多表複雜查詢
- python查詢mysql中文亂碼問題PythonMySql
- MySQL鎖表相關問題查詢思路MySql
- Mysql中的巢狀子查詢問題QSBSMySql巢狀
- SQL面試題 三(單表、多表查詢)SQL面試題
- 同一欄位多個查詢條件時遇到的一個問題
- JPA多表關聯查詢
- MySQL的GROUP_CONCAT函式輕鬆解決多表聯查的聚合問題MySql函式
- jpa動態查詢與多表聯合查詢
- MySQL:一個特殊的問題MySql
- MySQL 查詢字串的個數MySql字串
- 一個詭異的MySQL查詢超時問題,居然隱藏著存在了兩年的BUGMySql
- MySQL 優化五(關聯查詢子查詢以及 in 的效率問題)(高階篇)MySql優化
- Mybatis【15】-- Mybatis一對一多表關聯查詢MyBatis