簡體   English   中英

從多個未完成的單個聯接表中選擇數據

[英]Select data from multiple single joined tables not completing

我有一個t00XX_b 20個表的命名方案,如t00XX_b和一個對應的t00XX_b_results ,我想要做的就是加入所有這些對,並對所有這些表進行選擇,從而將數據添加到一個大表中。 從邏輯上來說,它應該這樣工作:

SELECT 
    *
FROM
    (t0001_b AS t1
    RIGHT JOIN t0001_b_results AS t2 ON t1.IndexResult = t2.IndexResult), /*generates ~20000 rows*/
    (t0002_b AS t3
    RIGHT JOIN t0002_b_results AS t4 ON t3.IndexResult = t4.IndexResult), /*generates ~6000 rows*/
    ...

但是,一旦我將表鏈接起來,查詢將不再完成。 如果我使用單個表對執行查詢,那么它將完美地工作。

這個例子很好用:

 SELECT 
     *
 FROM
      (t0001_b AS t1
      RIGHT JOIN t0001_b_results AS t2 ON t1.IndexResult = t2.IndexResult)

我看不到任何錯誤,但是我也不是SQL方面的專家。 怎么了? 有什么順序錯誤嗎?

我不知道這是否是您想要的邏輯 ,但是您的查詢無疑是正確的。 逗號是CROSS JOIN運算符,用於創建笛卡爾乘積。

另外,我的猜測是MySQL將實現每個聯接對。

沒有樣本數據和理想的結果,我無法真正提出具體建議,但也許您想要這樣:

SELECT *
FROM t0001_b t1 RIGHT JOIN
     t0001_b_results t2
     ON t1.IndexResult = t2.IndexResult
UNION ALL
SELECT *
FROM t0002_b t3
     t0002_b_results t4
     ON t3.IndexResult = t4.IndexResult
. . .

筆記:

  • 不要使用SELECT * ,尤其是對於UNION ALL操作。 您應該顯式列出這些列,尤其是當這些表共享列名時。
  • 我更喜歡LEFT JOIN而不是RIGHT JOIN 語義更容易(“保留第一張表中的所有行”)

暫無
暫無

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

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