我的數據庫中有兩張表(品牌和客戶)。Oracle中的簡單SQL語句
品牌
客戶
我想首先查找BRANDID爲每一個客戶。 然後comapre如果BRANDID再次匹配BRANDS表中的BRANDID。 如果匹配,則適當的BRANDNAME進入Customers BRANDNAME。 如果不匹配,一個字符串(無效)進入Customers BRANDNAME。
我需要使用INNER JOIN和CASE語句嗎?
我的數據庫中有兩張表(品牌和客戶)。Oracle中的簡單SQL語句
品牌
客戶
我想首先查找BRANDID爲每一個客戶。 然後comapre如果BRANDID再次匹配BRANDS表中的BRANDID。 如果匹配,則適當的BRANDNAME進入Customers BRANDNAME。 如果不匹配,一個字符串(無效)進入Customers BRANDNAME。
我需要使用INNER JOIN和CASE語句嗎?
你只需要一個OUTER JOIN加COALESCE:
select
c.id,
c.brandid,
coalesce(b.brandname, 'Invalid')
from customers c
left join brands b on c.brandid = b.brandid;
這是純粹的標準SQL,應該在任何DBMS中運行。
非常感謝。我能否認爲COALESCE是「如果」?如果存在,那麼相關的值就會變成但是不存在,那麼COALESCE(a,b)中的第二個參數中的值會出現在列中? – user3503758
是的,'COALESCE'實際上是'CASE當b.brandname不爲NULL,然後b.brandname ELSE'無效'END'的快捷方式,都是標準SQL。順便說一句,Oracle的'NVL'就像'COALESCE',但專有 – dnoeth
甲骨文有自己的外部連接語法,這比標準的SQL好得多,但這裏的ANSI SQL查詢:
select customers.id,customers.brandid,
if(brands.brandname is null,'Invalid',brands.brandname) as 'Brandname'
from customers
left join brands on (customers.brandid = brands.brandid) ;
要訪問tabelsname.aCulumn,我們需要加入表格嗎? – user3503758
這不是ANSI SQL,因爲SQL中沒有「IF」。 (順便說一句:甲骨文不鼓勵使用他們專有的(+)'運營商外部聯接) –
UPDATE Customers c
SET BRANDNAME = COALESCE((SELECT b.BRANDNAME
FROM Brands b
WHERE c.BRANDID = b.BRANDID),
'Invalid');
查詢1:
SELECT * FROM Customers
| ID | BRANDID | BRANDNAME |
|----|---------|-----------|
| 1 | 1 | APPLE |
| 1 | 2 | HTC |
| 1 | 3 | SAMSUNG |
| 1 | 10 | Invalid |
爲什麼你需要把名優產品列CUSTOMER表,你已經refe將其轉換爲BrandID。這會將數據放在多個容易出現數據不一致和冗餘的地方。按照設計,這不是必需的。如果您需要顯示每個客戶列表的品牌名稱,您可以使用JOIN? – HaveNoDisplayName
你可以添加你想要的輸出的例子嗎?請不要使用屏幕截圖來獲取示例數據。使用_formatted_文本(提示:選擇要格式化的文本後點擊'{}'按鈕) –
我想要做的是實際上檢查驗證。我想創建一個加入當前兩個表的表。在新表中,BRANDID和BRANDNAME列不止。無論如何,當插入時,我想確定BRANDID是否存在相關BRANDNAME也被插入,否則BRANDNAME被設置爲別的東西。問題是,當我嘗試加入表時,客戶已經有一個條件BRANDID,品牌的BRANDID是一樣的。這意味着新表將不會看到任何不匹配的數據。但我也需要處理不匹配或未加入的值。 – user3503758