1

ここに2つのテーブル user と userStore があります

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  ║           ║          ║
╚════╩══════╩════════╩═══════════╩══════════╝

ストア以外のロールでユーザー テーブルからすべての行をフェッチしたい。また、userstore テーブルに一致する場合にのみ store ロールを含めたいと考えました。出力では、ユーザー ストアからの一致がないため、id=3 が使用できないことがわかります。

4

2 に答える 2

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 )

その他のソース

于 2012-12-12T13:12:28.150 に答える
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);
于 2012-12-12T13:22:53.083 に答える