這就是場景。一共有三個表,TableA、TableB和Table C
表A
| ID | 姓名 | 產品編號 |
|---|---|---|
| 1 | 產品1 | 產品1 |
| 2 | 產品2 | 產品2 |
表B
| ID | 姓名 | 產品編號 | 代碼 |
|---|---|---|---|
| 1 | 隨機名稱 | 產品2 | 測驗代碼 |
表C
| ID | 報價名稱 | 產品編號 | 代碼 |
|---|---|---|---|
| 1 | 快樂優惠 | 產品1 | 測驗代碼 |
預期結果
| 表 A.ProductId | 表A.名稱 | 表B.名稱 | 表C.OfferName |
|---|---|---|---|
| 產品2 | 產品2 | 隨機名稱 | 空值 |
| 產品1 | 產品1 | 空值 | 快樂優惠 |
表 A 的 ProductId 是表 B 和表 C 的 ProductId 的外鍵。
通過使用基于代碼'testcode'的where子句來獲得這個預期結果的查詢是什么
uj5u.com熱心網友回復:
您將需要使用左連接,因為當連接條件不匹配時,它會回傳 null。在 TableB 和 TableC 的 where 子句中,您添加了對“testcode”的過濾。如果您關心代碼的縮寫,請為 TableA (TA)、TableB (TB) 和 TableC (TC) 使用表別名。
假設 SQL Server:
CREATE TABLE #tableA (id int, Name varchar(100), ProductId varchar(100))
CREATE TABLE #tableB (id int, Name varchar(100), ProductId varchar(100), Code varchar(100))
CREATE TABLE #tableC (id int, OfferName varchar(100), ProductId varchar(100), Code varchar(100))
INSERT INTO #tableA VALUES (1, 'product1', 'prod1'), (2, 'product2', 'prod2')
INSERT INTO #tableB VALUES (1, 'RandomName', 'prod2', 'testcode')
INSERT INTO #tableC VALUES (1, 'HappyOffer', 'prod1', 'testcode')
--Your DDL values above
SELECT TA.ProductId AS [TableA.ProductId]
,TA.Name AS [TableA.Name]
,TB.Name AS [TableB.Name]
,TC.OfferName AS [TableC.OfferName]
FROM #tableA TA
LEFT JOIN #tableB AS TB ON TA.ProductId = TB.ProductId
LEFT JOIN #tableC AS TC ON TA.ProductId = TC.ProductId
WHERE (TB.Code = 'testcode' OR TC.Code = 'testcode')
--put the ordering here as a bonus, since you wanted prod2 listed first in the ProductId
ORDER BY CASE WHEN TA.ProductId = 'prod2' THEN 1 ELSE 2 END
/* --to drop the temp tables afterwards
DROP TABLE #tableA
DROP TABLE #tableB
DROP TABLE #tableC
*/
產生輸出:
TableA.ProductId TableA.Name TableB.Name TableC.OfferName
---------------- ----------- ----------- ----------------
prod2 product2 RandomName NULL
prod1 product1 NULL HappyOffer
雖然這可能回答了外鍵僅參考列中的唯一值的問題,例如主鍵或唯一列。參考的值最好是整數,而主鍵往往是整數,因為它們比字串更有效地存盤和連接。
uj5u.com熱心網友回復:
我認為內部連接可以幫助你。
SELECT column_name(s)
FROM TableA
INNER JOIN TableB
ON TableA.ProductId = TableB.ProductId
INNER JOIN TableC ON TableA.ProductId =
TableC.ProductId);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460691.html
上一篇:混淆案例陳述值
下一篇:根據最小時間差減少表記錄
