Mysql

加入查詢返回 0 行 - 不可能在哪裡

  • March 27, 2022

我的查詢是使用 PDO 準備語句從 php Web 請求執行的。

:brand我想要的輸出是按頻率順序列出與“選定”品牌具有相同交易 ID 的前 10 個品牌。

我最初從下面的第一個查詢開始,該查詢包含由 2 列組成的小樣本數據的單個表(txn_id, brand)

我現在的目標/意圖是用實際數據實現這一點,這些數據被分成 2 個表,1_txns並且2_products, 有一個共同的欄位(sku)

查詢 #1:查詢 1 個表,返回所需的結果。(共享交易 ID 的前 10 個品牌):brand

SELECT brand
FROM transactions
WHERE
id IN (SELECT id FROM transactions WHERE brand = :brand)
AND brand <> :brand
GROUP BY brand
ORDER BY COUNT(*) DESC
LIMIT 10;

我嘗試修改現有查詢以使用實際數據,結果返回 0 行。我使用了 EXPLAIN,並註意到了一個 Impossible WHERE。顯然我絕不是專家,這實際上是我第一次使用 MySQL 處理連接和過濾器的子查詢。如果我能掌握這樣的事情,那麼我會考慮將我的一些 excel-> 訪問解決方案轉移到基於 Web 的。提前謝謝了

SELECT `2_products`.`brand` 
FROM `2_products` 
RIGHT JOIN `1_txns` 
ON `2_products`.`sku`=`1_txns`.`sku` 
WHERE `1_txns`.`txn_id` IN (SELECT `1_txns`.`txn_id` 
                     FROM `1_txns` 
                     WHERE `2_products`.`brand` = :brand) 
AND `2_products`.`brand` <> :brand 
GROUP BY `2_products`.`brand` 
ORDER BY COUNT(*) DESC 
LIMIT 10;

編輯:對於德里克·唐尼

純英文。此查詢應該返回使用所選品牌購買的前 10 個品牌的列表。數據如下: 1_txns

(txn_id, sku, salesamount, various other columns like qty etc)
1, 12345, 5
1, 12346, 10
2, 12345, 5
2, 12347, 10
3, 12345, 15
3, 12346, 30
4, 12346, 20
4, 12347, 10

2_產品

(sku, brand, various other columns)
12345, Nike
12346, Adidas
12347, Reebok

所需的輸出是:

If Nike is the selected brand
Adidas
Reebok

If Adidas is the selected brand
Nike
Reebok

If Reebok is the selected brand
Something that will deal with a tie and still list both in alphabetical order

此查詢應該返回使用所選品牌購買的前 10 個品牌(所選品牌除外)的列表。

嘗試這個:

SELECT `2_products`.`brand`, COUNT(*) as numOrders
FROM `2_products`
INNER JOIN `1_txns` ON `1_txns`.sku=`2_products`.sku
INNER JOIN (SELECT `1_txns`.`txn_id` 
   FROM `1_txns`
   INNER JOIN `2_products` USING (sku)
   WHERE brand = :brand) as tmp_txns ON tmp_txns.txn_id=`1_txns`.txn_id
WHERE brand <> :brand
GROUP BY brand
ORDER BY numOrders desc, brand ASC
LIMIT 10;

範例 sqlfiddle

引用自:https://dba.stackexchange.com/questions/123401