我正在嘗試過濾一些資料,但由于資料來自資料庫中的 2 個表,因此我必須將它們聯合在一起,允許第二個表中的空值,因為我總是需要在第一個表中提供任何可用值,因此是一個產品資料庫,其中一些產品有子組合,有些沒有。到目前為止,我已經想出了使用 Union 將兩個表連接在一起的方法,但現在我需要一種方法來使用 WHERE 子句過濾掉資料;然而:這就是我被卡住的地方。我嘗試將聯合作為選擇陳述句放在 FROM 子句中:沒有回傳資料,我嘗試將它作為子句放入 SELECT 子句中:沒有回傳資料...
簡而言之,我需要這樣的東西:
SELECT id_product, id_product_attribute,upc1,upc2
FROM (UNION)
WHERE upc1='xyz' OR upc2='xyz';
例如,結果可能是這樣的:
-> 100, null, 9912456, null
或者
-> 200, 153, 9915559, 9977123
目前我有這個(抱歉我沒有更多):
(SELECT product.id_product as id_product,
product.upc as upc1,
comb.id_product_attribute,
comb.upc as upc2
FROM `db`.table1 product
LEFT JOIN `db`.table2 comb
ON comb.id_product = product.id_product
)
UNION
(SELECT product.id_product as id_product,
product.upc as headCNK,
comb.id_product_attribute,
comb.upc
FROM `db`.table1 product
RIGHT JOIN `db`.table2 comb
ON comb.id_product = product.id_product
);
另請注意,upc1 來自表 1,而 upc2 來自表 2。
我可以使用整個查詢,并在最壞的情況下使用一些業務邏輯過濾掉所有內容,但不是因為我不想在不需要的地方執行無休止的查詢,我的服務提供商不喜歡那樣...
更新: 我也試過:
SELECT *
from db.t1 as prod
CROSS JOIN db.t2 as comb ON prod.id_product = comb.id_product
WHERE prod.upc = 'xyz' OR comb.upc = 'xyz';
這也不起作用。
在這里放置了一個帶有一些小樣本資料的小提琴:http : //sqlfiddle.com/#!9/340d7d
查詢SELECT id_product, id_product_attribute, table1.upc, table2.upc 中where 子句中使用的“991002”的輸出應為:101, null, 991002, null
對于“990001”,它應該是:101, 201, 990001, 990001
uj5u.com熱心網友回復:
對于所有值嘗試
SELECT t1.id_product, t2.id_product_attribute, t1.upc, t2.upc
FROM ( SELECT upc FROM table1
UNION
SELECT upc FROM table2 ) t0
LEFT JOIN table1 t1 USING (upc)
LEFT JOIN table2 t2 USING (upc)
對于定upc值編輯為
...
SELECT t1.id_product, t2.id_product_attribute, t1.upc, t2.upc
FROM ( SELECT 990001 upc ) t0
LEFT JOIN table1 t1 USING (upc)
LEFT JOIN table2 t2 USING (upc)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355532.html
上一篇:如何使此查詢運行得更快?
下一篇:Laravel中的多張圖片上傳
