0

次の SQL クエリを組み合わせて、同じ行の 3 つの列に州名、都市名、郵便番号を含む 1 つの出力テーブルを取得するにはどうすればよいですか? SQL の経験はほとんどありませんが、クエリを 1 つだけ作成できれば、3 つの個別のクエリを作成する方が少し良いように思えます。

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
4

5 に答える 5

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
于 2012-12-05T19:50:07.380 に答える
0

City_idStateProv_idおよびがすべて一意であると仮定するとPostalCode_id、クロス結合を使用し、それらのフィールドのみを制限するだけです。残りのデータ間に他の関係がない場合、最も効率的ではないかもしれませんが、実際には他の良いオプションではありません。

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

繰り返しになりますが、スキーマやデータのレイアウトに関する情報がないという事実を除けば、これはうまくいかない可能性があります。

于 2012-12-05T19:49:26.463 に答える
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では。

于 2012-12-05T19:54:33.097 に答える
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
于 2012-12-05T19:44:14.217 に答える
0

Cross joinそれぞれの場合に正確に 1 つの行が返されると仮定すると、良いアプローチのように思えます。

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
于 2012-12-05T20:29:54.327 に答える