簡體   English   中英

在SELECT和WHERE子句上使用相同的表

[英]Using the same table on SELECT and WHERE clause

簡單的情況

我有一個簡單的表,其中一列是同一表的另一元素的PK,如下所示:

    id     |  something   | parent_id
___________|______________|____________
     1     |   colors     |  null
     2     |   red        |  1
     3     |   green      |  1
     4     |   blue       |  1
    ...    |   ...        | ...

任務

我想獲取所有具有與條件匹配的元素的parent_id的元素。 讓我們假設父元素應該有something='colors'

預期結果

    id     |  something   | parent_id
___________|______________|____________
     2     |   red        |  1
     3     |   green      |  1
     4     |   blue       |  1

在環顧StackOverflow之后,我嘗試了:

SELECT * FROM my_table WHERE 
   parent_id=(SELECT id FROM my_table WHERE something='colors')

並且:

SELECT * FROM my_table as t1 WHERE
   t1.parent_id=(SELECT id FROM my_table as t2 WHERE t2.something='colors')

但是我得到這個錯誤:

錯誤:您的SQL語法有錯誤

原因是失蹤; 在我之前合並的先前文件上。 以上查詢確實有效 ...


這不是我的領域,我知道( 項目中的其他人使用的 )“ 解決方案 ”( )可能是:

SELECT * FROM my_table WHERE 
    parent_id=(SELECT id FROM (SELECT * FROM my_table) AS t1 WHERE something='colors')

但我不是很喜歡


感謝任何人的幫助。 我知道我們應該使用LIMIT 1或使用IN來防止錯誤,我正在盡我最大的努力簡化sintax。

存在使用

SELECT t1.* FROM table_name t1
WHERE EXISTS(SELECT 1 FROM table_name t2 WHERE t1.id=t2.parent_id)

你可以做 :

SELECT t.*
FROM table t
WHERE EXISTS(SELECT 1 FROM table t1 WHERE t1.id = t.parent_id AND t1.something = 'colors');

您可以通過簡單的JOIN來獲取它:

SELECT T1.* FROM my_table AS T1 
JOIN my_table AS T2 ON T1.parent_id = T2.id
WHERE T2.something='colors';

此技術稱為自連接。 在這里了解更多詳情。

暫無
暫無

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

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