基于几个表和条件的SQL语句

时间:2017-01-30 09:31:33

标签: sql oracle

我的问题是,如果我有2个表和3个条件,则在表1中我必须检查2个条件,在表2中,我必须仅检查1个条件,但也将表2中的另一个原始值与表1进行比较。

SELECT CUSTOMER_ID FROM Table1 WHERE Column_name1 = 'condition1' or Column_name2 = 'Condition2';
SELECT CUSTOMER_ID FROM Table2 WHERE Column_name3 IS NOT NULL;

所以我试图从这个2中创建1个sql代码,因此它将检查两个表并返回至少有一个条件为真的值。它应该显示CUSTOMER_ID表的值。

我尝试过这样的事情

    SELECT CUSTOMER_ID 
FROM Table1 
WHERE Column_name1 = 'condition1' or Column_name2 = 'condition2'
INNER JOIN Table2
ON Column_name3 IS NOT NULL
WHERE Table1.CUSTOMER_ID=Table2.CUSTOMER_ID;

但我在这个领域很新,我们可以说,我真的不明白为什么它不起作用。

如果任何TABLES中的任何条件都为真,那么期望的结果应该是它返回CUSTOMER_ID但是可能会发生一个CUSTOMER不仅得到一个为真但可能所有条件都是真的,所以我需要只列出一次客户的ID。

如果我要提供更多说明,请告诉我。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

问题不是很清楚,但看起来你需要:

SELECT CUSTOMER_ID FROM Table1 
  WHERE Column_name1 = 'condition1' or Column_name2 = 'Condition2'
union
SELECT CUSTOMER_ID FROM Table2 
  WHERE Column_name3 IS NOT NULL;
当您需要从不同表中的两个(或更多)源行创建一个结果行时,将使用

join
当您需要获取多个查询的结果总和时,将使用union。当union返回所有结果时,union all将仅返回唯一结果。

答案 1 :(得分:0)

去吧:

SELECT CUSTOMER_ID 
 FROM Table1 
 LEFT JOIN Table2
    On Table1.CUSTOMER_ID=Table2.CUSTOMER_ID;
 WHERE Column_name1 = 'condition1' or Column_name2 = 'Condition2' or Column_name3 IS NOT NULL