簡體   English   中英

MySQL:為什么在subselect中的where子句對另一個subselect的結果不起作用?

[英]MySQL: Why does where clause in subselect on result of another subselect not work?

我有這個選擇聲明:

select A.id,
    (select id from B order by rand() limit 1)b1,
    (select id from B where not id in(b1) order by rand() limit 1)b2,
    (select id from B where not id in(b1,b2) order by rand() limit 1)b3,
    (select id from B where not id in(b1,b2,b3) order by rand() limit 1)b4,
    (select id from B where not id in(b1,b2,b3,b4) order by rand() limit 1)b5
from A

它不是很快,它不會給我一個錯誤,但也不會做我想要的。

我想從表B中讀取5個隨機id並將它們連接到表A.

到目前為止這么好,我得到了表B中5個id的結果,但是有雙打。

即使我有這個應該防止雙打的where子句,我得到它們。

例如A.id:1有b1 = 1,b2 = 6,b3 = 1,b4 = 9,B5 = 3

我會理解,如果MySQL拋出一個錯誤,因為它無法處理語句,但沒有任何東西,所以我認為它應該工作,但事實並非如此。

有人對此有答案嗎?

編輯:如果結果看起來像這樣(子查詢)並不重要:1:2,7,3,9,6或者像這樣(加入):1:2 1:7 1:3 1:9 1:6

只要每個A.id都有不同的B.id。 兩個或更多的A.Id可以使用相同的B.id,但它應該是巧合。

仍然是MySQL接受查詢並給出錯誤結果的問題。

select id, b1, b2, b3, b4, b5
from (
    select A.id,
        @ := (select GROUP_CONCAT(DISTINCT id ORDER BY RAND()) AS ids from B),

        SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 1), ',', -1) b1,
        SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 2), ',', -1) b2,
        SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 3), ',', -1) b3,
        SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 4), ',', -1) b4,
        SUBSTRING_INDEX(SUBSTRING_INDEX(@, ',', 5), ',', -1) b5
    from A
) t

示例: http//sqlfiddle.com/#!2 / d7df9 / 9

請查看此帖子以選擇隨機行: 如何在SQL中隨機選擇行? 然后,您可以將其與其他表連接

SELECT B.id
FROM B JOIN A ON B.id=A.id
ORDER BY RAND()
LIMIT 5

暫無
暫無

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

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