[英]select statement within select
我的user
表中有一個manage
列,其中包含字符串'2','3','4','5','6'
,這些數字引用用戶“管理”的user.id
聲明:
SELECT * FROM user WHERE id IN(SELECT manage FROM user WHERE id = 1)
問題: 為什么我的陳述什么也沒返回?
您可以創建一個新表user_manages
,其中包含兩列: manager_id
和user_id
。 在表中為經理管理的每個用戶創建一個新記錄。 然后,您可以在兩個表之間建立聯接。
SELECT user.* FROM user_manages
INNER JOIN user ON user.id = user_manages.user_id
WHERE user_manages.manager_id = 1
in
值列表上工作,而不是單個字符串值。 因此,如果您具有類似val in ('1,2,3')
值,則asme為val = '1,2,3'
。
在多個列中存儲多個值是一個壞主意,原因有很多:
適當的解決方案是一個單獨的表,稱為聯結表。
有時候,a,我們會陷入別人的錯誤設計決定中。
如果是這樣,您可以使用find_in_set()
:
SELECT u.*
FROM user u
WHERE EXISTS (SELECT 1 FROM user u2 WHERE u2.id = 1 AND find_in_set(u.id, u2.manage) > 0);
注意:這假定字符串是逗號分隔的,沒有空格或引號。 您可能需要使用replace()
以正確的格式獲取字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.