簡體   English   中英

如何在SELECT語句中使用JOIN子句?

[英]How to use a SELECT statement into JOIN clause?

我有一個包含動態查詢的變量。 像這樣:

$query = "SELECT id, subject FROM post1
          UNION ALL
          SELECT id, subject FROM post2
          UNION ALL
          SELECT id, subject FROM post3";

我也有這個查詢:

SELECT code FROM mytable WHERE id = :id

現在我想join上述與動態查詢的查詢。 這是我的嘗試:

SELECT t1.code t2.subject FROM mytable t1 
   LEFT JOIN ($query) t2 ON t1.col = t2.id
WHERE t1.id = :id

/*
SELECT t1.code t2.subject FROM mytable t1
   LEFT JOIN (SELECT id, subject FROM post1
               UNION ALL
              SELECT id, subject FROM post2
               UNION ALL
              SELECT id, subject FROM post3) t2 ON t1.col = t2.id
WHERE t1.id = :id
*/

有用。 但是海量數據需要大量時間。 我怎樣才能使其更快?

SELECT t1.code t2.subject FROM mytable t1
   LEFT JOIN (SELECT id, subject FROM post1 
              JOIN mytable tt1 ON tt1.col = post1.id AND tt1.id=:id
               UNION ALL
              SELECT id, subject FROM post2
              JOIN mytable tt2 ON tt2.col = post2.id AND tt2.id=:id
               UNION ALL
              SELECT id, subject FROM post3
              JOIN mytable tt3 ON tt3.col = post3.id AND tt3.id=:id) t2 ON t1.col = t2.id
WHERE t1.id = :id

只需將:id檢查添加到內部查詢中即可限制所選數據量。

您可以使用以下查詢。

SELECT t1.code, t2.subject FROM (SELECT code, col FROM mytable WHERE id = :id ) t1 
 LEFT JOIN ($query) t2 ON t1.col = t2.id

暫無
暫無

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

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