這是我學習 SQL 的第一年,所以請耐心等待 :)
我收到的作業中有一個問題是這樣問的:“使用 IN 運算子查找在 2015 年 10 月 12 日下訂單的每個客戶的編號和姓名。” 所以,這是我嘗試使用的:
SELECT CUSTOMER_NUM, CUSTOMER_NAME
FROM CUSTOMER
WHERE ORDER_DATE IN
(SELECT ORDER_DATE
FROM ORDERS
WHERE ORDER_DATE = '12-OCT-15');
當我運行這段代碼時,我得到了一個錯誤:
ORA-00904: "ORDER_DATE": 識別符號無效
- 00000 - "%s: 無效的識別符號
我已經查看了我的教授在我們的筆記中提供的示例,并且我嘗試過改變一些事情(這只是給出了關于 Literals 的錯誤)。我需要來自兩個不同表的資料,因為 CUSTOMER_NUM 和 CUSTOMER_NAME 在 Customer 表中,而 ORDER_DATE 在 Orders 表中(CUSTOMER_NUM 也在 Orders 表中)
謝謝你的幫助。對不起,如果這是一個愚蠢的問題,我只是不知道從這里做什么:)
如果我需要從我正在使用的資料中添加更多資訊,請告訴我,以便您幫助我。
uj5u.com熱心網友回復:
SELECT CUSTOMER_NUM, CUSTOMER_NAME FROM CUSTOMER WHERE ORDER_DATE IN ('12-OCT-15');
嘗試這個
uj5u.com熱心網友回復:
看起來最初的錯誤源于where order_date in謂詞,正如我猜測的那樣(即使沒有表描述) ,表order_date中不存在customer。由于需要使用 IN,因此最初的任務似乎是customer_num從訂單表中查找,然后訪問客戶表以獲取找到的值。未測驗。
select cust.customer_num,
cust.customer_name
from customer cust
where cust.customer_num in
(select ord.customer_num
from orders ord
where trunc(ord.order_date) = date '2015-08-12'
);
筆記:
使用語法
order_date in ('12-OCT-15')是不好的做法,因為它取決于隱式轉換和 NLS_DATE_FORMAT 的設定。而是采用顯式轉換date 2015-08-12(ISO 日期
規范)。在 Oracle 中,所有日期資料型別都包含精確到秒的時間分量。您
trunc(<date_column>)用來剝離時間(實際上將其設定為 00:00:00)。顯式轉換也將設定時間相同。這樣就可以進行準確的日期=日期比較。不需要 DISTINCT。子查詢可能會回傳重復的客戶編號,但外部查詢會在遇到第一個時停止查找匹配項,因此只要
customer_num在客戶表中是唯一的,您就不會得到重復項。
uj5u.com熱心網友回復:
SELECT DISTINCT CUSTOMER.CUSTOMER_NUM,
CUSTOMER.CUSTOMER_NAME
FROM CUSTOMER
INNER JOIN ORDERS ON CUSTOMER.CUSTOMER_NUM = ORDERS.CUSTOMER_NUM
WHERE ORDER.ORDER_DATE IN ('2015-10-12');
我習慣了 POSTGRESQL,所以我不確定這種語法是否適用于 oracle,但你明白了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489476.html
上一篇:提取資料如果
