我该如何解决下一个问题?
我希望使用正确的语法。
SELECT * FROM table1, table2 WHERE table1.id OR table2.id = 1;
答案 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的所有记录。如果是,那么您需要回答自己:
尝试在查询中使用别名,这有助于阅读它们。您应该将查询重写为:
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;