Mysql

連接 4 個表,其中一個不相關

  • January 14, 2016

我有4張桌子如下。 表格一覽

我想通過以下方式找到一個限制為 25 條記錄的整數結果集:

  • 表 1 中基於條件的使用者
  • 那些使用者不應該在表 2 中$$ Non restricted users $$
  • 將這些記錄加入 Table3 上的 Table1.Group_id = Table3.Group_MEMBER_ID 其中 Table3.GroupName = ‘someValue’
  • 在 Table1.UserName = Table4.UserName 上加入 Table1 和 Table4

我目前正在使用兩個查詢並且正在使用 UNION。像這樣的東西:

     ( SELECT  Table_4.DeviceName
           from  Table1
           left join  Table2 on Table1.UserName = Table2.UserName
           inner join  Table4 on Table1.UserName = Table4.UserName
           where  Table1.some_column = 'someValue'
             and  Table2.UserName = null
           limit  25
     )
UNION
     ( SELECT  Table4.DeviceName
           from  Table1
           inner join  on Table1.Group_ID = Table3.GROUP_MEMBER_ID
           inner join  Table4 Table1.UserName = Table4.UserName
           where  Table3.GroupName='someValue'
             and  Table1.some_column = 'someValue'
           limit  25
     ); 

關鍵是,我不能將 Wholesum 結果集限制為 25 條記錄。我應該對每個查詢使用 LIMIT。有沒有辦法將它合併到一個查詢中,以便我可以將整個結果集限制為 25?

注意:PL/SQL 和 CTE 在我的開發系統中不可用,因此無法使用。

問題1: LIMITORDER BY指明是哪個25有點意思。

問題2:不要說x=null,它不會像你想的那樣做。而是做x IS NULL.

問題 3:您真的想要“交叉連接”嗎?也就是說,沒有 ON 子句的 JOIN,因此得到兩個表的所有組合?

問題 4:嗯,我沒有檢查你所擁有的其餘部分。

回到你的問題……模式是

( SELECT ... ORDER BY ... LIMIT 25 )
UNION ALL  -- or DISTINCT, depending on your understanding of the data
( SELECT ... ORDER BY ... LIMIT 25 )
ORDER BY ... -- Yes, again
LIMIT 25;

如果你需要一個偏移量,比如 100,那麼:

( ... LIMIT 125 )
UNION ...
( ... LIMIT 125 )
ORDER BY ...
LIMIT 100, 25;

引用自:https://dba.stackexchange.com/questions/126257