2013-11-24 120 views
0

有人可以告诉我我做错了什么吗?SQL加入问题oracle 11g

问题:

创建名字和姓氏的唯一列表的人S.

住在雅法4389露台上ERD:

enter image description here

什么我试过:

SQL> SELECT MORTAL.FIRST_NAME, MORTAL.LAST_NAME 
    2 FROM MORTAL 
    3 LEFT JOIN MORTAL_ADDRESS ON MORTAL.MORTAL_ID = MORTAL_ADDRESS.MORTAL_ID 
    4 LEFT JOIN ADDRESS ON MORTAL_ADDRESS.ADDRESS_ID = ADDRESS.ADDRESS_ID 
    5 WHERE ADDRESS.ADDRESS_LINE1 LIKE '4389%'; 

no rows selected 

我不太喜欢'LIKE'运算符,我宁愿使用'='来代替。

SQL> SELECT MORTAL.FIRST_NAME, MORTAL.LAST_NAME 
    2 FROM MORTAL 
    3 LEFT JOIN MORTAL_ADDRESS ON MORTAL.MORTAL_ID = MORTAL_ADDRESS.MORTAL_ID 
    4 LEFT JOIN ADDRESS ON MORTAL_ADDRESS.ADDRESS_ID = ADDRESS.ADDRESS_ID 
    5 WHERE ADDRESS.ADDRESS_LINE1 = '4389%'; 

no rows selected 

SQL> SELECT MORTAL.FIRST_NAME, MORTAL.LAST_NAME 
    2 FROM MORTAL 
    3 LEFT OUTER JOIN MORTAL_ADDRESS ON MORTAL.MORTAL_ID = MORTAL_ADDRESS.MORTAL_ID 
    4 LEFT OUTER JOIN ADDRESS ON MORTAL_ADDRESS.ADDRESS_ID = ADDRESS.ADDRESS_ID 
    5 WHERE ADDRESS.ADDRESS_LINE1 = '4389%'; 

no rows selected 

我知道它在什么地方加入,但是这似乎是一个简单的左加入,因为这个我见过,在w3schools.com:

enter image description here

伊夫运行几个查询测试数据:

SQL> select address_line1 from address 
    2 where upper(substr(address_line1, 5,1)) = 'J'; 

no rows selected 

SQL> select address_line1 from address 
    2 where address_line1 like '4389%'; 

ADDRESS_LINE1 
------------------------------------------------------- 
4389 JAFFA Terrace S. 
4389 Jaffa Terrace S. 

有没有办法做到这一点,我还没有看到,没有使用“喜欢”?

(请回答一个答案,而不是评论,所以我可以上剔你,谢谢!)

回答

1
SELECT MORTAL.FIRST_NAME, MORTAL.LAST_NAME 
FROM MORTAL 
JOIN MORTAL_ADDRESS ON MORTAL.MORTAL_ID = MORTAL_ADDRESS.MORTAL_ID 
JOIN ADDRESS ON MORTAL_ADDRESS.ADDRESS_ID = ADDRESS.ADDRESS_ID 
WHERE ADDRESS.ADDRESS_LINE1 LIKE '%4389%'; 

试试这个样子,如果它的工作原理,你需要了解它的列TRIM。

大概地址传遍

WHERE zip_code=4389 AND ADDRESS_LINE1='Jaffa...' 
+0

我仍然得到“没有选择的行”。 –

+0

@BrianWilson您确定该列有数据吗? – Mihai

+0

是的,数据在该列: 4389 JAFFA Terrace S. 4389 Jaffa Terrace S. @Mihai –