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,它会在状态栏中显示 active1 无效 等等

tables here

我该如何解决?

在 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>