编辑:问题已更改 - SQL:从表中的所有行获取列名称不在另一个表中的行

时间:2011-08-31 00:14:21

标签: sql oracle

以前从未做过SQL(我怎么可能不知道),

我有两张桌子,如下:

Table1:

Column Names:    A    B    C
Rows:            1  sdf  sdsd
                 2  seg  werr

Table2:

Column Names:    A    B    C     D    E    F
Rows:            1    sdf  sdsd  yuj  uui  ddd
                 1    sdf  sdsd  sss  sdd  ssw
                 1    sdf  sdsd  jut  scv  sef
                 2    seg  werr  oel  ewe  wee
                 2    seg  werr  ujf  etr  wuk
                 2    seg  werr  los  hjd  wee

编辑:问题已经改变。

如何使用第二个表中唯一的列获取所有行?即我只想要来自D,E和F的数据,其中表1中A,B,C中的值对应于表2中的A,B,C值。

例如,假设A = 1且B = sdf,我想要行:

sdsd  yuj  uui  ddd
sdsd  sss  sdd  ssw
sdsd  jut  scv  sef

我可以去:SELECT * FROM Table2 WHERE A ='1'AND B ='sdf'但我会得到

1    sdf  sdsd  yuj  uui  ddd
1    sdf  sdsd  sss  sdd  ssw
1    sdf  sdsd  jut  scv  sef

5 个答案:

答案 0 :(得分:1)

最直接的方式是:

Select D, E From Table2

如果您正在寻找动态内容,解决方案将取决于您使用的是哪个数据库供应商。没有不可知的动态解决方案。

答案 1 :(得分:1)

只需列出您要选择的列。

例如,给定A='1'B='sdf'

SELECT C,D,E,F FROM Table2 WHERE A='1' AND B='sdf' 

答案 2 :(得分:0)

您希望在LEFT JOIN中使用特殊操作的RIGHT JOIN(或WHERE)来查找不匹配的值。

在这种情况下,像这样:

SELECT Table2.*
FROM Table2 LEFT JOIN Table1 USING (SomeCommonField)
WHERE Table1.SomeCommonField IS NULL

答案 3 :(得分:0)

通常,您需要访问系统表或目录视图才能执行此操作。确切的语法取决于您使用的DBMS ...

答案 4 :(得分:0)

似乎在这里你有一个唯一的例子,其中NATURAL JOIN是正确的解决方案,因为你的列名在两个表中完全相同。

 SELECT D, E, F
   FROM table1
NATURAL JOIN table2
  WHERE a = '1'
    AND b = 'sdf'
    AND c = 'sdsd'