2016-12-06 36 views
0

我有這種情況:多條線路之間選擇

我需要它的地方外鍵是指tableB的 等選擇從TableA的數據:tableA.tableB_id = tableB的ID通知

OR

第二個限制是指在桌子B上通知的郵政編碼,在桌子B中存在初始郵政編碼和最終郵政編碼,以及在桌子A上存在單個郵政編碼。

實施例:

CREATE TABLE tableA (
    id integer PRIMARY KEY, 
    tableB_id INTEGER, 
    postalCode varchar(10) 
); 

CREATE TABLE tableB (
    id integer PRIMARY KEY, 
    InitialPostalCode varchar(10), 
    FinalPostalCode varchar(10) 
); 

表B是與多個初始和最終郵政編碼

我需要從表A其中tableB_id = tableB.id OR TABLEA選擇位置的LIST。 cep is tableB.InitialPostalCode and tableB.FinalPostalCode

SELECT 
    id, 
    postalCode 
FROM 
    tableA 
WHERE 
    tableB_id = ID 
    OR postalCode BETWEEN... 


SELECT 
    InitialPostalCode, 
    FinalPostalCode 
FROM 
    tableB 
WHERE 
    id = some ID; 

我該如何合併這兩個查詢?

謝謝大家!

+0

'加入b.id = a.b_id或b.initial和b.final'之間的a.cep? –

回答

1

這是你想要的嗎?

SELECT a.id, a.postalCode 
FROM tableA a 
WHERE EXISTS (SELECT 1 FROM tableB b WHERE b.id = a.tableB_id) OR 
     EXISTS (SELECT 1 FROM tableB b WHERE a.cep BETWEEN b.InitialPostalCode AND b.FinalPostalCode); 

我更喜歡使用EXISTS因爲:

  • 您只希望從tableA列,所以tableB沒有需要FROM子句。
  • 每個子查詢都可以使用適當的索引進行優化。
  • 處理後沒有理由刪除重複項。
  • ORON子句可能非常低效。
+0

我不得不改變一下,但作品完美,謝謝! –