我已經嘗試了幾個小時來獲得所有的ID,其中2個不同的meta_key的meta_value是相同的。
例如,我希望下面的例子能夠回傳user_id 1和2,因為他們的first_name和last_name的meta_value在同一個user_id下是完全一樣的。
| user_id | <meta_key | <meta_value | <|
|---|---|---|---|
| 0 | first_name | Joe? | Joe |
| 0 | last_name | 姓 | Doe |
| 1 | first_name | 名。 | Peter? |
| 1 | last_name | 姓 | Peter? |
| 2 | first_name | 2. | Simon |
| Simon | |||
| 2 | last_name | 姓氏 |
預先感謝!
uj5u.com熱心網友回復:
在MySQL中,你可以直接使用聚合:
select vals, group_concat(user_id) as user_ids
from (select user_id,
group_concat(meta_value order by meta_key) as vals
from t
where meta_key in ('first_name', 'last_name')
group by user_id
having count(*) = 2 -- Both keys present
)
group by vals
having count(*) >= 2;
這將回傳串聯的鍵和具有這些值的用戶ID的串列。
注意:這個特殊的表述假設名稱中沒有逗號(group_concat()的默認分隔符)。 如果這是個問題,你可以將分隔符調整為不太常用的字符,例如|。
uj5u.com熱心網友回復:
你可以自我加入表格
CREATE TABLE tab1
(`user_id` int, `meta_key` varchar(10), `meta_value` varchar(5)
;
INSERT INTO tab1
(`user_id`, `meta_key`, `meta_value`)
VALUES[/span
(0, 'first_name', 'Joe') 。
(0, 'last_name', 'Doe') 。
(1, 'first_name', 'Peter') 。
(1, 'last_name', 'Peter') 。
(2, 'first_name', 'Simon') 。
(2, 'last_name', 'Simon')
;
SELECT DISTINCT a. user_id FROM tab1 a INNER JOIN tab1 b。 ON a.`meta_value` = b.`meta_value` AND a.`meta_key` <>/span> b.`meta_key` AND a.`meta_key` = 'first_name' AND b. `meta_key` = 'last_name'| user_id | | ------: | | 1 | | 2 |
db<>fiddle here
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306793.html
標籤:
