簡體   English   中英

從另一個表聯接結果

[英]Joining Results From Another Table

我正在處理一個大型查詢,該查詢將一個表中的數據映射到CSV文件中,因此它基本上看起來像一個基本的選擇查詢-

SELECT * FROM item_table

-除了*實際上是一百行的CASE,IF,IFNULL和其他邏輯。

我被告知要在select語句中添加“相似項”行,該行應為一串用逗號分隔的項號。 可以在category_table中找到相似的項目,該類別可以在column_a和column_b這兩個數據點上與item_table聯接,category_table.category_id具有標識相似項目的數據。

此外,有人告訴我不要使用子查詢。

因此,我需要從該表中連接具有相同category_id值的category_table和group_concat項目編號(但不具有與當前記錄相同的項目編號)。

如果無論指令如何都只能使用子查詢來執行此操作,我會接受的,但是如果可能的話,我希望使用join和group_concat進行操作-我無法弄清楚。 我怎樣才能做到這一點?

我認為這是您正在尋找的內容,盡管我不確定是什么唯一標識了您的item_table,所以我使用了column_a和column_b(可能不正確):

SELECT 
    ...,
    GROUP_CONCAT(c.category_id separator ',') CategoryIDs
FROM item_table i
   JOIN category_table ct ON i.column_a = ct.column_a AND
      i.column_b = ct.column_b
GROUP BY i.column_a, i.column_b

我使用了常規的INNER JOIN ,但是如果category_table可能沒有任何相關記錄,則可能需要使用LEFT JOIN來獲得所需的結果。

您可以使用稱為隱藏列的mySQL“功能”。

我將假設您在項目表中有一個項目ID,該ID可以唯一地標識每一行。 而且,如果我的邏輯正確,則以下查詢將滿足您的要求:

select i.*, group_concat(c.category_id)
from item_table i left outer join
     category_table c
     on i.column_a = c.column_a and
        i.column_b = c.column_b and
        i.item_id <> c.category_id
group by i.item_id

也許是這樣的嗎?

SELECT i.*, GROUP_CONCAT(c.category_id) AS similar_items
  FROM item_table i
INNER JOIN category_table c ON (i.column_a = c.column_a AND
                                i.column_b = c.column_b)
GROUP BY i.column_a, i.column_b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM