#mysql #qsqlquery
#mysql #qsqlquery
Вопрос:
В моей базе данных есть 4 таблицы MySQL:
Users
(uid, имя)Shops
(shopId, shopName)Reviews
(Идентификатор обзора, текст, идентификатор пользователя, идентификатор магазина, скорость, дата)TransactionHistory
(Идентификатор транзакции, идентификатор пользователя, идентификатор магазина, сумма, дата)
Пользователи пишут свои комментарии к магазинам в Reviews
таблице. И история платежей пользователей в некоторых магазинах сохраняется в TransactionHistory
таблице.
Мне нужно выбрать отзывы всех пользователей за некоторый период времени, если эти пользователи совершали платежи в этом магазине за тот же период времени.
-
Select userId, shopId, rate, text, date from Review where date between "01.01.2019" and "01.02.2019" where shopId in (select distinct(shopId) from Shops)
-
Select userId, shopId, date from TransactionHistory where date between "01.01.2019" and "01.02.2019"
Итак, у меня есть два результирующих набора, и некоторые записи имеют одну и ту же пару (userId, shopId) — это то, что я хочу получить: все записи из 1 SQL-запроса, какие пары (userId, shopId) присутствуют в 2 SQL-запросе.
Ответ №1:
Если я правильно понял, все, что вам нужно, это оператор соединения, подобный этому:
SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)
Вот ресурс https://dev.mysql.com/doc/refman/8.0/en/join.html
В вашем случае внутри оператора on будет то, что вы хотите, чтобы быть равным.
Select userId, shopId, rate, text, date from Review r join TransactionHistory th on (r.userId == th.userId and r.shopId == th.shopId) where r.date between "01.01.2019" and "01.02.2019" where r.shopId in (select distinct(shopId) from Shops)
Ответ №2:
SELECT u.uid, u.name as userName, u.surname, s.name, rate, review, c.amount FROM `rsamazingapp.rsamazingapp.reviews` as r
INNER JOIN `rsamazingapp.cashbacks` as c ON (r.uid = c.uid and r.shop_id = c.shop_id)
INNER JOIN `rsamazingapp.shops` as s on (r.shop_id = s.shop_id)
INNER JOIN `rsamazingapp.users` as u on (r.uid = u.uid)
where r.shop_id in (select distinct shop_id from `rsamazingapp.shops`)
order by rate desc