У меня есть две таблицы. Я хочу присоединиться к ним способом, что только одна запись в правильной таблице возвращается для каждой записи в левых большая часть таблицы. Я включал пример ниже. Я хотел бы избежать подзапросов и временных таблиц, как фактические данные о 4M строки. Я также не забочусь, какая запись в самой правой таблице подобрана, целая одна, или ни один не подобран.Спасибо!
пользователи таблицы:
-------------
| id | name |
-------------
| 1 | mike |
| 2 | john |
| 3 | bill |
-------------
транзакции таблицы:
---------------
| uid | spent |
---------------
| 1 | 5.00 |
| 1 | 5.00 |
| 2 | 5.00 |
| 3 | 5.00 |
| 3 | 10.00 |
---------------
ожидаемый вывод:
---------------------
| id | name | spent |
---------------------
| 1 | mike | 5.00 |
| 2 | john | 5.00 |
| 3 | bill | 5.00 |
---------------------
Использование:
SELECT u.id,
u.name,
MIN(t.spent) AS spent
FROM USERS u
JOIN TRANSACTIONS t ON t.uid = u.id
GROUP BY u.id, u.name
Помните, что это вернет только пользователей, у которых есть хотя бы одна запись ТРАНЗАКЦИИ. Если вы хотите видеть пользователей, у которых нет подтверждающих записей, а также тех, у кого они есть, используйте:
SELECT u.id,
u.name,
COALESCE(MIN(t.spent), 0) AS spent
FROM USERS u
LEFT JOIN TRANSACTIONS t ON t.uid = u.id
GROUP BY u.id, u.name
Если вам не важна конкретная строка, вы вернетесь.
select id, name, spent
from users
left join transactions on users.id = transactions.uid
group by id
Будет возвращена одна строка для каждого пользователя. Это будет первая согласованная транзакция.
См. SO 3305709 для эквивалентного недавнего вопроса с рядом разумных ответов. Цитируемая там СУБД - это Postgres, но различия здесь незначительны.
Прошу прощения, если это не отвечает на ваш вопрос. Похоже, вы пытаетесь увидеть, у каких пользователей есть хотя бы одна транзакция. Вы можете сделать это и в процессе посмотреть, сколько каждый пользователь потратил, сделав что-то вроде этого:
SELECT u.id, u.name, SUM(t.spent) AS total FROM USERS u INNER JOIN TRANSACTIONS t ON t.uid = u.id GROUP BY u.id , u.name