2017-01-12 2 views
-1

Ma requête passe en dessousEviter que le produit cartésien dans SQL lors de l'utilisation Lorsque, dans la clause

select a.col1,a.col2,b.col1,b.col2 from table1 a, table2 b 
where a.col3=value and b.col2 in (select col from table1 where col3=val) 

Cette donne répéter les valeurs Par exemple.

Résultat obtenu

----------------------- 
S.No| Name| Value| Code 
------------------------ 
1| Delhi| capital| 100 
------------------------ 
2 |Mumbai| city | 101 
------------------------ 
1 |Delhi| city| 101 
------------------------ 
2 |Mumbai| capital |100 
------------------------ 

Résultat attendu

----------------------- 
S.No| Name| Value| Code 
------------------------ 
1 |Delhi| capital |100 
---------------------- 
2 |Mumbai| city |101 
---------------------- 

J'ai essayé groupe par elle ne fonctionne pas. Comment cela pourrait-il être résolu?

données exemples

Tableau 1

------------------------ 
S.NO| Name |Type |Value 

1| Delhi |BIGCITY| Capital 
------------------------- 
2| Mumbai| BIGCITY| City 
------------------------ 

Tableau 2

--------------- 
Value |Code 
--------------- 
Capital |100 
--------------- 
City |101 
-------------- 
select a.sno,a.name,b.value,b.code from table1 a, table2 b 
    where a.type=BIGCITY and b.col2 in (select value from table1 where col3=BIGCITY) 
+0

Pouvez-vous fournir des exemples de données à savoir les données de la table que vous essayez d'interroger? –

+0

S'il vous plaît décrire ce que vous voulez réellement réaliser ici. De la requête seule, ce n'est pas très clair. Veuillez également fournir les tableaux d'entrée afin que l'exemple puisse être reproduit. –

+2

Si vous avez utilisé une jointure de style "moderne" (ils n'ont été qu'une partie standard de SQL pendant un quart de siècle) et exprimé une véritable * condition de jointure * entre les tables 'a' et' b', vous ne le feriez pas J'ai une jointure cartésienne. –

Répondre

1

Essayez cette jointure de base requête:

SELECT a.sno, 
     a.name, 
     COALESCE(b.value, 'NA') AS value, 
     COALESCE(b.code, 'NA') AS code 
FROM table1 a 
LEFT JOIN table2 b 
    ON a.value = b.value 
WHERE a.type = 'BIGCITY' 

Demo ici:

SQLFiddle

+0

Qu'en est-il du Où a.type = "BIGCITY"? cette condition n'est pas remplie – praveenrsmart

+0

Cette partie coalesce ne fonctionne pas, si je supprime que j'obtiens un résultat nul pour b.value et b.code – praveenrsmart

+0

Ma requête fonctionne comme prévu en utilisant les données fournies, q.v. le violon que je t'ai donné. Si cela ne fonctionne pas, vos données doivent être la raison. –