我有兩個表:「合併」完全外部連接而不是?
+-----------------------+
| Tables_in_my_database |
+-----------------------+
| orders |
| orderTaken |
+-----------------------+
在訂單中,有屬性
orderId, orderName, isClosed and orderCreationTime.
在orderTaken,有屬性
userId, orderId and orderStatus.
比方說,當
orderStatus = 1 --> the customer has taken the order
orderStatus = 2 --> the order has been shipped
orderStatus = 3 --> the order is completed
orderStatus = 4 --> the order is canceled
orderStatus = 5 --> the order has an exception
基本上我的項目運行機制是這樣的:具有唯一userId的用戶將能夠從網頁接收訂單,其中每個訂單也具有其自己的唯一orderId。採取後,orderTaken表將記錄userId,orderId並初始設置orderStatus = 1.然後,商店根據各種情況更新orderStatus。一旦商店更新了isClosed = 1,那麼無論用戶採用或不採用該順序都不會顯示(沒有意義,但它只是查詢中的isClosed == 0)。
現在,我想構建一個網頁,將顯示用戶還沒有采取的新訂單(應該是orderIds沒有記錄在該用戶的userId下的orderTaken表中的訂單),以及用戶已經使用orderStatus顯示的順序,但是orderStatus不是4或5,按orderCreationTime DESC組合(如果我沒有OrderTakenTime但是讓我們保持這種方式,也許沒有意義),就像:
OrderId 4
Order Name: PetPikachu
orderStatus = 1
CreationTime: 5am
OrderId 3
Order Name: A truck of hamsters
orderStatus = 3
CreationTime: 4am
OrderId 2
New order
Order Name: Macbuk bull
CreationTime: 3am
OrderId 1
Order Name: Jay Chou's Album
orderStatus = 2
CreationTime: 2am
我已經基於這樣的認識,我得知這個查詢寫:
SELECT * FROM orders A WHERE A.isClosed == '0' FULL OUTER JOIN orderTaken B WHERE B.userId = '4' AND (B.orderStatus<>'4' OR B.orderStatus<>'5') ORDER BY A.orderCreationTime DESC;
顯然,這查詢不工作,但恐怕有
ON A.orderId = B.orderId
自此之後返回將消除將訂單還沒有被記錄在orderTaken B.我的新訂單」表以前也嘗試了NOT IN子句像
SELECT * FROM orders A WHERE A.isClosed = '0' AND A.orderId NOT IN (SELECT orderId FROM orderTaken B WHERE B.userId = '$userId' AND (B.orderStatus='4' OR B.orderStatus='5')) ORDER BY creationTime DESC;
這個查詢的作品,但它不會在返回的表有場orderStatus從orderTaken B中。我想在此查詢後添加另一個JOIN orderTaken B子句以從B中獲取字段,但我認爲這不是寫好查詢的好方法。
我只是想結合「不在」和「全加入」。有人可以幫我嗎?謝謝!
謝謝泰耶!這正是我想要的!我正在考慮使用LEFT JOIN,但我只是不知道「IS NULL」子句。這是我從你那裏學到的關鍵。再次感謝您解決我的問題! :D – Hang
我現在更正了表名(orderTaken,拼寫爲orderStatus)。 –
這使得它更加精確。再次感謝Terje! – Hang