2015-04-15 107 views
0

我试图从第二个表中选择哪个ID在我的第一个表中。我试过这个:从第二个表中选择值,该ID在我的第一个表中

select 
    FIRST_NAME, 
    LAST_NAME, 
    c.name status  
    from STUDENTS 
    left join PAYER_STATUS c on Status = c.ID 
    where status like N'%'||'active'||'%';! 

但它什么都没显示。这里只是清空一切。但是,如果我将活动更改为它显示在状态列字活动。对于 不活跃

tables here

我怎样才能解决呢?

+0

请发布create table和insert语句。并显示您所需的输出。 –

+0

@LalitKumarB它创建很久以前,过去的程序员创建它。在Status状态为0的情况下应该有输出激活,激活,激活状态(请参阅我提供的图片) – gsiradze

+0

STUDENT表中是否有另一个状态列?请从两个表中选择*以获取所有列名! – jarlh

回答

2

在where子句中使用您的列名。因为你有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'||'%';! 
+0

它不起作用。也许查询无法识别状态的ID? idk .. P.S.我还没有downvoted – gsiradze

+0

@乔治尝试编辑的 –

+0

同样的空结果 – gsiradze

1

不能在WHERE/ON使用列别名,同样,当LEFT JOIN移动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'||'%';! 
+0

c.name和c.id在同一个表中......我们如何才能使用它连接两个表? –

+0

好问题!我知道什么,我还没有看到桌上的def ......(我会编辑。) – jarlh

+0

这很有趣,但我的问题是,在数据库字活跃是大写,我试图小写。谢谢 – gsiradze

1

我向你们表示完整的测试用例,大概是从下一次你能为我们提供同样如此,这将是容易让我们重现您的问题。这样我们没有进行反向工程,并建立表和所需数据

设置

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> 
+0

谢谢。下次我会尝试改进我的问题。你的代码不能正常工作。主要的想法是,它会搜索我什么时候尝试通过A.status(在这种情况下为0)来搜索它。但如果我将A.status更改为b.Name,我会尝试通过'active'进行搜索,但这不起作用 – gsiradze

+0

然后向我们展示我展示的方式。你在做什么,你的查询是什么?什么是期望的输出?编辑你的问题,添加这些细节。 –

+0

这很有趣,但我的问题是,在数据库字活跃是大写,我试图小写。谢谢 – gsiradze

相关问题