2015-04-15 109 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

相關問題