簡體   English   中英

選擇內的選擇語句

[英]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_iduser_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'

在多個列中存儲多個值是一個壞主意,原因有很多:

  • MySQL的字符串函數並不是特別強大。
  • 整數應存儲為數字,而不是字符串。
  • 一欄只能包含一個值。
  • 外鍵關系應正確定義。
  • 使用“字符串列表”列的查詢不能使用索引。

適當的解決方案是一個單獨的表,稱為聯結表。

有時候,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.

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