做了許多搜索並能夠編寫除此之外的所有JOIN查詢。我有3個表,看起來像:MySQL - 通過將多個表連接到多個WHERE/OR子句來返回單個記錄
TABLE - accounts
account_id | account_email
1 | [email protected]
2 | [email protected]
TABLE - products
product_id | product_name
1 | name1
2 | name2
TABLE - licenses
license_id | account_id | product_id | license_code
1 | 1 | 1 |
2 | 1 | 2 |
3 | 0 | 1 | abc123
我知道account_email
,product_id
和license_code
(這一個可以爲空)變量,需要檢查客戶端許可證所選產品(通過account_email
或license_code
搜索) 。
問題是account_id
有時可能是0(換句話說,客戶端有許可證,但客戶端的配置文件沒有存儲在帳戶表中)。
試圖用這一個,但它返回錯誤的(重複)的結果:
SELECT * FROM licenses
INNER JOIN products ON licenses.product_id=products.product_id AND products.product_id='X'
INNER JOIN accounts ON licenses.account_id=accounts.account_id AND accounts.account_email='XYZ' OR licenses.license_code='ZZZ'
的問題:我該如何改寫查詢,這樣我就可以通過account_email
或license_code
領域找到一個記錄?簡而言之,如果account_id
不是0(存在配置文件),我應該看到來自3個表(帳戶,產品,許可證)的數據。如果account_id
爲0,我應該看到來自2個表的數據(來自accounts表的值應該顯示爲空/空)。不用說,account_email
和license_code
字段是唯一的。
需要從第二次加入之前刪除'AND': –
感謝您的建議。它顯示了多個SQL錯誤,所以我通過在第二次加入之前刪除「AND」並在最後一個「WHERE」之前刪除「AND」來修改它。希望它仍然可以嗎? –
不幸的是,代碼不起作用。當account_email存在於數據庫中時,它可以正常工作,但是當account_email在數據庫中不存在時(因此記錄需要通過license_code找到),將顯示0個結果。 –