[英]What type of Join to use?
我有一個核心表和3個表以不同的方式擴展'核心'表。
我正在使用MLS數據,我有一個'通用'表,其中包含所有mls列表共有的信息,然后是一個具有“住宅”信息的表,一個用於“商業”等...我一直在使用mls當我知道屬性類型已知時我知道列表時加入單個表的數字,但是對於搜索我希望加入所有這些並且具有可用於搜索條件的特殊字段(而不是簡單地搜索公用表)。
什么類型的連接會給我一個包含所有列表的數據集(包括idx表中的擴展字段)?
對於每個公用表記錄, 只有一個 idx表中有一個相應的記錄。
___________
| |
| COMMON |
| |
|___________|
_|_
|
___________________|_____________________
_|_ _|_ _|_
_____|_____ _____|______ ____|______
| | | | | |
| IDX1 | | IDX2 | | IDX3 |
| | | | | |
|___________| |____________| |___________|
如果你想要一行中的所有內容,你可以使用這種格式。 基本上它給你所有的“公共”字段,然后是其他字段,如果有匹配,否則為NULL
:
SELECT Common.*,
Idx1.*,
Idx2.*,
Idx3.*
FROM Common
LEFT JOIN Idx1
ON Idx1.MLSKey = Common.MLSKey
LEFT JOIN Idx2
ON Idx2.MLSKey = Common.MLSKey
LEFT JOIN Idx3
ON Idx3.MLSKey = Common.MLSKey
請記住,最好列出字段,而不是盡可能使用SELECT *
...
另外我假設MySQL語法與SQL Server相同,這就是我使用的。
我有一個類似的表,其中表'jobs'是核心表。
我有這個查詢,從其他兩個表中的每一個表中選擇某些元素:
SELECT jobs.frequency, twitterdetails.accountname, feeds.feed
FROM jobs
JOIN twitterdetails ON twitterdetails.ID = jobs.accountID
JOIN feeds ON jobs.FeedID = feeds.FeedID
WHERE jobs.username ='".$currentuser."';");
因此,正如您所看到的,沒有特定的JOIN,但定義了鏈接字段。 您可能只需要一個額外的JOIN行來進行設置。
丑陋的解決方案/糟糕的嘗試/可能有誤解的問題:
SELECT common.*,IDX1.field,NULL,NULL FROM COMMON
LEFT JOIN IDX1 ON COMMON.ID = IDX1.ID
WHERE TYPE="RESIDENTIAL"
UNION ALL
SELECT common.*,NULL,IDX2.field,NULL FROM COMMON
LEFT JOIN IDX2 ON COMMON.ID = IDX2.ID
WHERE TYPE="RESIDENTIAL"
UNION ALL
SELECT common.*,NULL,NULL,IDX3.field FROM COMMON
LEFT JOIN IDX3 ON COMMON.ID = IDX3.ID
WHERE TYPE="INDUSTRIAL"
軌道很接近。 使用內連接,而不是左連接。 如果在idx中沒有行,則不希望common出現在join中。
你必須聯合3個查詢來獲得正確的結果,假設每個共同的記錄只能有1個idx表。 插入“NULL”以填充每個idx表缺失的列,以便它們可以聯合。
BTW你的桌子設計很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.