簡體   English   中英

Mysql group_concat(id)作為左聯接中的ID,並使用ID選擇ID組中的所有列

[英]Mysql group_concat(id) as ids in a left join and using ids to select all columns in id group

我有一個表格,其中包含一些帶有其自己的ID和共享SKU密鑰的文章。 我試圖用左聯接進行查詢,並使用組結果獲取查詢返回的所有ID。

我的數據結構是這樣的:

id -    name   - sku - ...
1  - felix     - cat
2  - tom       - cat - ...
3  - sylvester - cat - ...
4  - red       - pen - ...
5  - blue      - pen - ...

我嘗試使用此查詢:

SELECT * FROM `test` 
[LEFT/RIGHT/INNER] JOIN 
(
    SELECT GROUP_CONCAT(DISTINCT id) AS idsgroup FROM `test` WHERE (attribute_name = 'sku') GROUP BY value_name LIMIT 0, 3 
) bind
ON id IN (bind.idsgroup);

該查詢是錯誤的,每個組僅返回1個ID,而不是從concat或LEFT JOIN情況下選擇的所有ID,顯然是所有行。

有任何建議解決方法可以達到正確的結果?

編輯:

這里的結構是一個小提琴: http : //sqlfiddle.com/#!9/b6747a

我嘗試的查詢:

   SELECT * FROM `view_test` 
    INNER JOIN 
    (
        SELECT GROUP_CONCAT(DISTINCT entity_id) AS idsgroup FROM `view_test` WHERE (attribute_name = 'sku') GROUP BY value_name LIMIT 0, 3 
    ) bind
    ON entity_id IN (bind.idsgroup);

如這張圖片所示,我的結果丟失了一些ID,屬於該組。 查詢結果

編輯2:在我使用了Kickstart建議的FIND_IN_SET()之后,結果是預期的:

SELECT * FROM `view_test` 
INNER JOIN 
(
    SELECT GROUP_CONCAT(DISTINCT entity_id) AS idsgroup FROM `view_test` WHERE (attribute_name = 'sku') GROUP BY value_name LIMIT 0, 3 
) bind
ON FIND_IN_SET(entity_id, bind.idsgroup);

正確的結果

簡單的解決方法似乎是對聯接使用FIND_IN_SET。 但這是一個小技巧,並不會那么快。

SELECT * 
FROM `view_test` 
INNER JOIN 
(
    SELECT GROUP_CONCAT(DISTINCT entity_id) AS idsgroup 
    FROM `view_test` 
    WHERE (attribute_name = 'sku') 
    GROUP BY value_name 
    LIMIT 0, 3 
) bind
ON FIND_IN_SET(entity_id, bind.idsgroup);

進一步不確定,為什么在子查詢上有一個LIMIT,尤其是沒有order子句的情況。

可能更好的方法是使用子查詢來獲得DISTINCT實體ID和sku的attribute_name並與之連接。

SELECT * 
FROM `view_test` 
INNER JOIN 
(
    SELECT DISTINCT entity_id 
    FROM `view_test` 
    WHERE (attribute_name = 'sku') 
) bind
ON view_test.entity_id = bind.entity_id

像這樣嗎

SELECT t.*, group_concat(t2.id) FROM `test` t
LEFT JOIN test t2 ON t2.attribute_name = 'sku' and t.id != t2.id
group by t.id;

行,以及具有相同SKU的所有ID的列表

暫無
暫無

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

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