我使用的數據庫目前確實有兩個表,一個拿着屬性「contact_person」。此屬性相比,它被命名爲「contact1」到「contact4」,確定從第二個表顯示什麼其他屬性在另一個表中的多個屬性(不是元組!)(即「EMAIL1」到「EMAIL4」)。所以第一個表只保存聯繫人,第二個表是幾個聯繫人的實際地址數據(再次,他們都在一行或一個元組中)。別告訴我,這AINT正確的數據庫設計 - 我有我得到了-.-選擇尚未在記錄的所有記錄
得到什麼我選擇執行選擇每個比較UNION他們正確的聯繫人數據的工作。這工作正常,執行查詢的應用程序足夠執行。它看起來很簡單,像這樣:現在
SELECT contact1, email1, phone1 FROM T1,T2 WHERE contact_person = contact1
UNION ALL
SELECT contact2, email2, phone2 FROM T1,T2 WHERE contact_person = contact2
UNION ALL
SELECT contact3, email3, phone3 FROM T1,T2 WHERE contact_person = contact3
UNION ALL
SELECT contact4, email4, phone4 FROM T1,T2 WHERE contact_person = contact4
,由於畸形和非錯誤檢查INSERT查詢,有可能是「contact_person」是NULL或空字符串或任何「 contactN「屬性爲NULL。所以我需要另一個SELECT查詢,它顯示所有記錄在數據庫中但不在記錄集中的記錄。
有了,可以使用類似於這樣可以實現給定的例子:
UNION
SELECT contact_person, 'N/A', 'N/A' FROM T1,T2
在現實生活中查詢我(需要)做了很多「contact_person」和「contactN」 S的格式,所以簡單地做一個UNION(沒有ALL,所以平等的記錄被排除)不會工作(contactN實際上是一個多字段值,格式不一致,所以最後一個查詢返回的記錄可能不同於上面的記錄,甚至對於數據庫中的相同條目)。此外,查詢是如此之大已經是它沒有選擇使用第一查詢相反,排除它的記錄,像這樣:
UNION ALL
SELECT contact_person, 'N/A', 'N/A' FROM T1,T2
WHERE contact_person <> contact1
AND contact_person <> contact2
AND contact_person <> contact3
AND contact_person <> contact4
所以有另一種方式來顯示那些沒有被選中的所有記錄與上面發佈的第一個查詢?也許通過某種方式運行一個子查詢(OFC確實存在返回記錄的UID - 我只是不知道如何在這種情況下使用它)?第一個查詢是否可以用更簡單的方式寫出來?
哦,我與表前綴工作,並加入 - 我只是試圖保持它短而簡單。此外,我不幸現在沒有重新設計數據庫的任何部分的選項。這隻有在訪問它的應用程序將被重寫時纔會發生,這是我目前工作的公司發現它具有必要的貨幣資源來執行此操作。我現在試圖說服他們很長一段時間。無論如何,這看起來很像我需要的東西 - 只是我今天無法測試它(它在我們公司的關閉時間)。我會檢查它並明天標記答案。謝謝。 –