2
SELECT 
    a.customers_id, b.name, b.office, b.username, a.serial_number, a.id
FROM 
    user_assets AS a
left JOIN 
    customers AS b ON 
        a.customers_id = b.id 
WHERE NOT 
        (b.username LIKE 'Warehouse') 
    AND (serial_number LIKE 'R8%' 
        OR serial_number LIKE 'LR%' 
        OR serial_number LIKE 'R9%')
GROUP BY
    a.customers_id
HAVING (COUNT(a.customers_id) >=2);

クエリは、複数のコンピューターを持っているユーザーを見つける必要があります。ユーザーごとに 1 つのレコードのみが表示されますが、serial_number 列から関連するすべての行を表示するにはどうすればよいですか?

編集

and a.customers_id = a.customers_idそれは私が試していたものであり$by、この質問には不要であるため削除されました

4

2 に答える 2

0

left joinand は必要ありませんがgroup by、where 句でサブクエリを使用した単純な内部結合が必要です。

select b.customers_id, b.name, b.office, b.username, a.serial_number, a.id
from user_assets a, customers b 
WHERE a.customers_id = b.id 
  and b.username != 'Warehouse' 
  and (serial_number LIKE 'R8%' or serial_number LIKE 'LR%' or serial_number LIKE 'R9%')
  and (select count(1) from user_assets a1 
       where a1.customers_id=b.id
       and (serial_number LIKE 'R8%' or serial_number LIKE 'LR%' or serial_number LIKE 'R9%')  
      ) >= 2

また、このようなシリアル番号の -predicatesasset_typesの代わりに、ディレクトリ テーブルを作成して使用することを検討する必要があります。likeそれはより効果的であり、一般的にはるかに優れた方法です。

于 2013-09-01T08:15:06.537 に答える