select 来自第二个 table 的值,哪个 ID 在我的第一个 table 中
select value from second table which ID is in my first table
我正在尝试从第二个 table 中 select 值,哪个 ID 在我的第一个 table 中。我试过这个:
select
FIRST_NAME,
LAST_NAME,
c.name status
from STUDENTS
left join PAYER_STATUS c on Status = c.ID
where status like N'%'||'active'||'%';!
但它什么也没显示。这里只是清空一切。但是,如果我将 active 更改为 0,它会在状态栏中显示 active。 1 无效 等等
我该如何解决?
在 where 子句中使用您的列名称。因为 table 中有 status
列。因此它将使用该列而不是 c.name
检查传递的值
select
s.FIRST_NAME,
s.LAST_NAME,
c.name as status
from STUDENTS s
left join PAYER_STATUS c on s.Status = c.ID
where c.name like N'%'||'active'||'%';!
您不能在 WHERE
/ON
中使用列别名,此外,当 LEFT JOIN
将外部 table 的 WHERE
子句条件移动到 ON
子句,否则它将是一个常规的 INNER JOIN
.
select FIRST_NAME,
LAST_NAME,
c.name status
from STUDENTS s
left join PAYER_STATUS c
on s.somecolumn = c.ID
and c.name like N'%'||'active'||'%';!
我正在向您展示一个完整的测试用例,可能下次您可以向我们提供类似的,这样就很容易我们 重现您的问题。这样 我们就不必进行逆向工程和构建表格和所需数据:
设置
SQL> CREATE TABLE status(ID NUMBER, NAME VARCHAR2(20));
Table created.
SQL> CREATE TABLE students(NAME VARCHAR2(10), status VARCHAR2(20));
Table created.
SQL>
SQL> INSERT INTO status VALUES(0, 'ACTIVE');
1 row created.
SQL> INSERT INTO status VALUES(1, 'INACTIVE');
1 row created.
SQL> INSERT INTO status VALUES(2, 'SUSPEND');
1 row created.
SQL>
SQL> INSERT INTO students VALUES('a', 0);
1 row created.
SQL> INSERT INTO students VALUES('b', 0);
1 row created.
SQL> INSERT INTO students VALUES('c', 0);
1 row created.
SQL> INSERT INTO students VALUES('d', 1);
1 row created.
SQL>
表格
SQL> SELECT * FROM status;
ID NAME
---------- --------------------
0 ACTIVE
1 INACTIVE
2 SUSPEND
SQL>
SQL> SELECT * FROM students;
NAME STATUS
---------- --------------------
a 0
b 0
c 0
d 1
SQL>
需要查询:
SQL> SELECT a.NAME,
2 a.status,
3 b.NAME
4 FROM students a
5 JOIN status b
6 ON (a.status = b.ID)
7 WHERE a.status = 0;
NAME STATUS NAME
---------- -------------------- ------
a 0 ACTIVE
b 0 ACTIVE
c 0 ACTIVE
SQL>
我正在尝试从第二个 table 中 select 值,哪个 ID 在我的第一个 table 中。我试过这个:
select
FIRST_NAME,
LAST_NAME,
c.name status
from STUDENTS
left join PAYER_STATUS c on Status = c.ID
where status like N'%'||'active'||'%';!
但它什么也没显示。这里只是清空一切。但是,如果我将 active 更改为 0,它会在状态栏中显示 active。 1 无效 等等
我该如何解决?
在 where 子句中使用您的列名称。因为 table 中有 status
列。因此它将使用该列而不是 c.name
select
s.FIRST_NAME,
s.LAST_NAME,
c.name as status
from STUDENTS s
left join PAYER_STATUS c on s.Status = c.ID
where c.name like N'%'||'active'||'%';!
您不能在 WHERE
/ON
中使用列别名,此外,当 LEFT JOIN
将外部 table 的 WHERE
子句条件移动到 ON
子句,否则它将是一个常规的 INNER JOIN
.
select FIRST_NAME,
LAST_NAME,
c.name status
from STUDENTS s
left join PAYER_STATUS c
on s.somecolumn = c.ID
and c.name like N'%'||'active'||'%';!
我正在向您展示一个完整的测试用例,可能下次您可以向我们提供类似的,这样就很容易我们 重现您的问题。这样 我们就不必进行逆向工程和构建表格和所需数据:
设置
SQL> CREATE TABLE status(ID NUMBER, NAME VARCHAR2(20));
Table created.
SQL> CREATE TABLE students(NAME VARCHAR2(10), status VARCHAR2(20));
Table created.
SQL>
SQL> INSERT INTO status VALUES(0, 'ACTIVE');
1 row created.
SQL> INSERT INTO status VALUES(1, 'INACTIVE');
1 row created.
SQL> INSERT INTO status VALUES(2, 'SUSPEND');
1 row created.
SQL>
SQL> INSERT INTO students VALUES('a', 0);
1 row created.
SQL> INSERT INTO students VALUES('b', 0);
1 row created.
SQL> INSERT INTO students VALUES('c', 0);
1 row created.
SQL> INSERT INTO students VALUES('d', 1);
1 row created.
SQL>
表格
SQL> SELECT * FROM status;
ID NAME
---------- --------------------
0 ACTIVE
1 INACTIVE
2 SUSPEND
SQL>
SQL> SELECT * FROM students;
NAME STATUS
---------- --------------------
a 0
b 0
c 0
d 1
SQL>
需要查询:
SQL> SELECT a.NAME,
2 a.status,
3 b.NAME
4 FROM students a
5 JOIN status b
6 ON (a.status = b.ID)
7 WHERE a.status = 0;
NAME STATUS NAME
---------- -------------------- ------
a 0 ACTIVE
b 0 ACTIVE
c 0 ACTIVE
SQL>