在子句中使用 Where 时避免 SQL 中的笛卡尔积

Avoid Cartesian Product in SQL when using Where in 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)

这是给重复的值 例如

获得结果

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

预期结果

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

我试过 Group by 它不起作用。如何解决?

示例数据

Table 1

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

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

Table 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)

试试这个基本的连接查询:

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'

此处演示:

SQLFiddle