1

クエリの作成に少し問題があります。私は2つのテーブルを持っています:

user_data
+----+---------+--------+
| id | mail    | etc... |
+----+---------+--------+
|  1 | 1@m.com | ...    |
|  2 | 2@m.com | ...    |
|  3 | 3@m.com | ...    |
+----+---------+--------+

 

contracts
+----+---------+--------+
| id | user_id | etc... |
+----+---------+--------+
|  1 |       1 | ...    |
|  2 |       2 | ...    |
|  3 |       1 | ...    |
|  4 |       1 | ...    |
|  5 |       3 | ...    |
+----+---------+--------+

ご覧のとおり、最初の表にはユーザーに関するデータが含まれ、2番目の表にはユーザーの契約に関するデータが含まれています。ユーザーに関するエントリは常に1つだけですが、ユーザーは複数の契約を持つことができます。ここで、すべてのユーザー、最初のコントラクトID (コントラクトテーブルで最小のIDを持つ)、およびパラメーターに含まれている場合は電子メールを確認する必要があります。

これまでのところ、私はそのようなクエリを持っています:

SELECT
  u.id as user_id,
  c.id as first_contract_id,
  u.mail as email
FROM
  user_data u
JOIN
  contracts c ON u.id = c.user_id
WHERE
  u.mail
IN (
  '1@me.com',
  '2@me.com',
  '3@me.com'
);

only the lowest contract IDこれらの結果からどのように選択できるかわかりません。感謝するのを手伝ってください。

4

2 に答える 2

1
SELECT
  u.id as user_id,
  min(c.id) as first_contract_id,
  u.Mail as email
FROM
  user_data u
JOIN
  contracts c ON u.id = c.user_id
WHERE
  u.mail IN ('1@me.com', '2@me.com', '3@me.com')
GROUP BY u.id

ユーザーの場合はgroup by、を使用して最低の契約を取得できますmin

(そして、MySQLはグループにない列を選択することに問題はありません)

于 2012-07-27T13:35:40.513 に答える
1
select 
    u.id as user_id, 
    c.id as first_contract_id, 
    u.Mail as email 
from users as u inner join
(
    select min(id) as id,user_id from contracts 
    group by user_id
) as c
on  u.id = c.user_id 
WHERE 
      u.mail 
    IN ( 
      '1@me.com', 
      '2@me.com', 
      '3@me.com' 
    ); 
于 2012-07-27T13:37:42.383 に答える