2017-08-17 33 views
1

請幫忙編寫這個查詢。這是表圖:帶有兩個鏈接表的SQL查詢

diagram

用戶響應爲販賣毒品的具體銷售類型。如何查找針對特定用戶ID在同一銷售類型中響應相同藥物的用戶?

例如:

  • 愛麗絲銷售維生素A,維生素B在迴應零售
  • 鮑勃銷售維生素A,維生素B在零售國家應對市場
  • 查理維生素B迴應,維生素C在州市場

用戶此響應相同salestype藥

  • 愛麗絲是Bob
  • 爲Bob是愛麗絲和Charlie
  • 爲查理鮑勃
+0

請改寫 你的問題。 – zarruq

+0

SalesType-Drug是「User」表中的關鍵字? –

+1

我不認爲你的數據模型支持你的例子...具體鮑勃是不可能的,因爲如果你加入用戶鮑勃到維生素A,維生素B,零售,州市場,你會得到所有4種組合,而不僅僅是你提出的4種。您需要一種將SalesType和Drug的組合連接到用戶的類型(編輯:實際上,您*不需要您當前擁有的兩個底部表格中的任何一個)。 – AjahnCharles

回答

2

對於給定的實施例:

對於用戶通過所有銷售類型銷售相同藥物的示例數據:

SELECT mus.userId 
FROM User2SalesType qus 
INNER JOIN User2Drug qud  ON qus.UserId = qud.UserId 
INNER JOIN User2SalesType mus ON qus.SalesTypeId = mus.SalesTypeId 
           AND mus.UserId != qus.UserId 
INNER JOIN User2Drug mud  ON qud.DrugId = mud.DrugId 
           AND mus.UserId = mud.UserId 
WHERE qus.UserId = ? # querying user ID 

更靈活的數據:

如果你想支持用戶通過銷售Y(而不是藥物A通過銷售Y或藥物甲乙經銷售X由銷售X和藥劑B暢銷的藥物一)你可以使用這個數據模型:

User:  id, etc. 
Response: userId, salesTypeId, drugId 
SalesType: id, etc. 
Drug:  id, etc. 

然後你就可以自行加入響應查詢:

SELECT mu.userId 
FROM response qu      # querying user 
INNER JOIN response mu     # matching users 
    ON qu.salesTypeId = mu.salesTypeId 
    AND qu.drugId = mu.drugId 
    AND qu.userId != mu.userId 
WHERE qu.userId = ?     # ? = querying user ID 
+0

你是對的,我改變例子。更改型號不適用 – user1167761

+0

@ user1167761 - 我認爲我的更新適用於您的現有型號。 – AjahnCharles

+0

謝謝!只需添加不同的部分 - SELECT distinct(mus.userId) – user1167761