2012-12-12 37 views
1

在這裏,我有2代表用戶和userStoreMySQL的 - 將2臺不同條件

user Table 
╔════╦══════╦════════╦═══════════╗ 
║ ID ║ NAME ║ ROLE ║ STORECODE ║ 
╠════╬══════╬════════╬═══════════╣ 
║ 1 ║ A ║ Admin ║   ║ 
║ 2 ║ B ║ Store ║   1 ║ 
║ 3 ║ C ║ Store ║   ║ 
║ 4 ║ D ║ Client ║   ║ 
║ 5 ║ E ║ Staff ║   ║ 
╚════╩══════╩════════╩═══════════╝ 

userStore Table 
╔════╦══════════╗ 
║ ID ║ CATEGORY ║ 
╠════╬══════════╣ 
║ 1 ║ X  ║ 
║ 2 ║ X  ║ 
╚════╩══════════╝ 

Output 
╔════╦══════╦════════╦═══════════╦══════════╗ 
║ ID ║ NAME ║ ROLE ║ STORECODE ║ CATEGORY ║ 
╠════╬══════╬════════╬═══════════╬══════════╣ 
║ 1 ║ A ║ Admin ║   ║   ║ 
║ 2 ║ B ║ Store ║   1 ║ X  ║ 
║ 4 ║ D ║ Client ║   ║   ║ 
║ 5 ║ E ║ Staff ║   ║   ║ 
╚════╩══════╩════════╩═══════════╩══════════╝ 

我想所有的用戶表中的行比其他店的作用取。並且只想在storetore表中匹配時才包含商店角色。 在輸出中,您可以看到id = 3不可用,因爲它沒有來自用戶存儲的匹配。

+0

我的條件是,如果角色=店那麼它必須在userstore行,否則我不想該行要取 – ASD

回答

2

這應該是簡單的,使用LEFT JOIN

SELECT a.*, b.* 
FROM user a 
     LEFT JOIN userStore b 
      ON a.StoreCode = b.ID 
WHERE (a.role <> 'Store') OR 
     (a.role = 'Store' AND NOT b.ID IS NULL) 

其他來源

1

試試這個:

SELECT u.id, u.name, u.role, u.StoreCode, IFNULL(us.id, '') id, IFNULL(us.Category, '') Category 
FROM USER u 
LEFT JOIN userStore us ON u.StoreCode = us.id 
WHERE IF(LOWER(u.role) = 'store', u.StoreCode IS NOT NULL AND u.StoreCode != '', TRUE);