2012-12-05 150 views
0

如何組合下列SQL查詢,以便在同一行的3個單獨列中獲得一個包含州,城市和郵政編碼名稱的輸出表?我幾乎沒有使用SQL的經驗,但是如果我能做出一個查詢,似乎對我來說會更好。結合SQL查詢?

SELECT City_tx FROM City WHERE City_id = 11 

SELECT StateProv_tx FROM StateProv WHERE StateProv_id = 12 

SELECT PostalCode_tx FROM PostalCode WHERE PostalCode_id = 13 
+2

谷歌的話'JOIN' – msmucker0527

+2

你能證明你的表架構... normaly你可以使用一個加入但因此表必須有任何連接 – Mik

+0

它也會使...因爲它是1:1的關係...將所有這些信息放入一個表...城市 - 州 - 郵政編碼...通常他們永遠不會改變,他們都不能有兩個或更多的其他人 – Mik

回答

2

如果您沒有表格之間的任何關係。簡單地聲明3個變量&設置它們(只是上述答案以外的另一種方法);

DECLARE @City VARCHAR(100), @StateProv VARCHAR(100), @PostalCode VARCHAR(100) 

SELECT @City = City_tx FROM City WHERE City_id = 11 
SELECT @StateProv = StateProv_tx FROM StateProv WHERE StateProv_id = 12 
SELECT @PostalCode = PostalCode_tx FROM PostalCode WHERE PostalCode_id = 13 

SELECT @City City, @StateProv StateProv, @PostalCode PostalCode 
0
select max(City_tx),max(StateProv_tx),max(PostalCode_tx) from 
(
SELECT City_tx ,'' StateProv_tx, '' PostalCode_tx FROM City WHERE City_id = 11 
union all 
SELECT '' City_tx ,StateProv_tx, '' PostalCode_tx FROM StateProv WHERE StateProv_id = 12 
union all 
SELECT '' City_tx ,'' StateProv_tx, PostalCode_tx FROM PostalCode WHERE PostalCode_id = 13 
) t 
0

假設City_idStateProv_idPostalCode_id都是獨一無二的,那麼它只是使用交叉連接,只限制在這些領域的問題。可能不是最有效的,但也算不上什麼其他好的選擇,如果你有數據的其餘部分之間沒有其他的關係:

SELECT City_tx, StateProv_tx, PostalCode_tx 
FROM City, StateProv, PostalCode 
WHERE City_id = 11 AND StateProv_id = 12 AND PostalCode_id = 13 

再次,雖然,除非一個事實,即我們沒有架構或如何任何信息數據是佈局的,這可能甚至不能爲你工作。

0
SELECT City_tx, (SELECT StateProv_tx FROM StateProv WHERE StateProv_id = 12) as sp_tx, (SELECT PostalCode_tx FROM PostalCode WHERE PostalCode_id = 13) as pc_tx FROM City WHERE City_id = 11 

它應該工作...至少在MySQL。

0

Cross join似乎是個不錯的辦法,假設你有在每種情況下返回恰好一行:

select * 
from (SELECT City_tx FROM City WHERE City_id = 11) c cross join 
    (SELECT StateProv_tx FROM StateProv WHERE StateProv_id = 12) s cross join 
    (SELECT PostalCode_tx FROM PostalCode WHERE PostalCode_id = 13) p