2017-07-17 112 views
1

我想從公司類別表中獲取不存在於公司類別交叉表中的類別id和名稱。例如,公司ID爲3早已1類和2類,我想將SQL結果獲得3類 Company table如何做mysql連接以獲得3個表格的結果

Company category

Company category cross

我嘗試下面的語句,但沒有得到預期的結果

SELECT `wp_bmg_company_category`.id, `wp_bmg_company_category`.name 
FROM `wp_bmg_company_category` 
INNER JOIN `wp_bmg_company_category_cross` 
ON `wp_bmg_company_category`.id != `wp_bmg_company_category_cross`.categoryid 

回答

1

如果我理解正確,你搜索類別,現在是未使用的。

  1. 選擇與類別ID的所有公司的數據(僅返回類ID)
  2. 從類別中,category id NOT IN (use 1. select data)

選擇所有的數據,如果您單獨找到的唯一的未使用類別爲每個公司。使用這樣的事情(ADD COMPANY_ID搜索每家公司分別,搜索未使用的類別):

SELECT * 
FROM category ca 
WHERE category_id NOT IN 
    (SELECT category_id 
     FROM category  c1 
      JOIN category_cross cc ON c1.id = cc.category_id 
     WHERE company_id = 1) 
+0

是的我正在尋找未使用的類別。我沒有得到你Jan。我應該使用什麼查詢? –

+0

請檢查我的查詢上,請;) –

+1

感謝噸1月它的工作。 –

0

你需要的是一個外連接(左或右),可以從表中檢索所有記錄,而不管無論它是否出現在另一張桌子上。 (您可以使用not in()not exists()代替外部聯接)。

您需要的另一種技術稱爲笛卡爾連接,即將一個表中的所有記錄與另一個表中的所有記錄進行匹配。在這種情況下,請將公司表中的所有記錄與類別中的所有記錄進行匹配,以獲取公司類別組合的完整列表。然後從中減去你所擁有的類別列表。

select co.id, co.name, ca.id, ca.name 
from (wp_bmg_company co join wp_bmg_company_category ca) --this creates the Cartesian join 
left join wp_bmg_company_category_cross cr on co.id=cr.companyid and ca.id=cr.categoryid 
where cr.id is null --only the non-matched pairs should remain 
+0

這會讓我得到公司未使用的類別嗎? –

+0

在提出這樣的問題之前,請務必誠實地嘗試理解我的答案並嘗試編碼。 – Shadow

相關問題