2012-12-05 4 views
0

Comment puis-je combiner les requêtes SQL suivantes pour obtenir une table de sortie contenant le nom de l'état, de la ville et du code postal dans trois colonnes distinctes sur la même ligne? J'ai peu d'expérience avec SQL, mais faire 3 requêtes séparées si je pouvais faire un seul semble un peu mieux pour moi.Combiner des requêtes 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

Google le mot JOIN' – msmucker0527

+2

peut vous montrer votre schéma de table ... vous auriez normalement utiliser un joindre, mais par conséquent les tables doivent avoir une connexion – Mik

+0

il ferait aussi sence ... comme c'est une relation 1: 1 ... pour mettre toutes ces informations dans une seule table ... ville - état - postalCode ... normalement ils ne changent jamais et aucun d'entre eux ne peut en avoir 2 ou plus des autres – Mik

Répondre

2

Si vous n'avez aucune relation entre les tables. Il suffit de déclarer 3 variables & les définir (juste une autre méthode autre que les réponses ci-dessus);

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

En supposant City_id, StateProv_id et PostalCode_id sont tous uniques, il est juste une question d'utiliser une jointure croisée et en limitant uniquement sur les champs. Peut-être pas les plus efficaces, mais pas vraiment d'autres bonnes options si vous avez pas d'autres relations entre le reste des données:

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

Encore une fois cependant, sauf le fait que nous avons aucun schéma ni aucune information sur la façon dont les données sont présentées, cela pourrait même ne pas être en mesure de travailler pour vous.

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 

Il devrait fonctionner ... au moins dans MySQL.

0

Cross join semble être une bonne approche, en supposant que vous avez exactement une ligne retournée dans chaque cas:

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