2在1个查询中选择1个ID

时间:2020-07-13 08:46:13

标签: sql oracle

我该如何解决下一个问题?

我希望使用正确的语法。

SELECT * FROM table1, table2 WHERE table1.id OR table2.id = 1;

4 个答案:

答案 0 :(得分:0)

不确定您的确切要求。使用两个表时,首先必须将它们连接起来,并在WHERE子句中提供必要的过滤器

请在下面的查询中使用

SELECT * FROM table1, table2 
WHERE 
table1.id = table2.id 
and table1.id = 1;

答案 1 :(得分:0)

在我看来,您的需求似乎是table1.id = 1或table2.id = 2的交叉连接。在这种情况下,您可以这样做:

select * from table1 cross join table2 where table1.id = 1 or table2.id = 1

但是请注意,这是一个交叉联接,意味着您可能会获得大量的行。

当一个表中恰好包含1行时,交叉连接才有意义的用例。那可能是一个配置表。

答案 2 :(得分:0)

首先,您的语法错误。在SQL中,您需要指定哪个条件适用于每个表达式。您不能将两个字段组合为同一表达式的一部分。 SQL不是一种过程语言,它不提供数组或类型的构造。

SELECT * FROM table1, table2 WHERE table1.id OR table2.id = 1;

我想您正在尝试从table1和table2获取所有ID等于1的所有记录。如果是,那么您需要回答自己:

  • 我要两个表中的所有列吗?
  • 我是否希望id = 1的所有table1和table2记录?

尝试在查询中使用别名,这有助于阅读它们。您应该将查询重写为:

select a.* , b.* from table1 a , table2 b where a.id = b.id and a.id = 1 ;

尽管我将删除在两个表中都重复的所有字段,但是如果没有,Oracle将用名称后跟_1替换重复字段的第二次迭代

您的查询也可以用ANSI SQL重写

select a. , b.* from table1 a inner join table2 b on ( a.id = b.id ) 
where a.id = 1;

在您的情况下,您将在输出中看到一个名为ID的列,以及一个名为ID_1(也为ID)的第二列,但是由于您没有指定要获取的列(您输入星号),因此Oracle需要以使每个列都是唯一的方式限定列。

答案 3 :(得分:0)

正确的语法为:

Container

您还可以通过执行以下操作来达到相同的结果:

SELECT * FROM table1, table2 WHERE table1.id = table2.id AND table1.id = 1;