Выберите одинаковые пары значений из двух таблиц - PullRequest
0 голосов
/ 21 апреля 2019

В моей базе данных 4 таблицы MySQL:

  1. Users (uid, name)
  2. Shops (shopId, shopName)
  3. Reviews (ReviewId, текст, идентификатор пользователя, shopId, ставка, дата)
  4. TransactionHistory (транзакция, идентификатор пользователя, shopId, сумма, дата)

Пользователи пишут свои комментарии в магазиныв Reviews таблице.А история пользовательских платежей в некоторых магазинах сохраняется в таблице TransactionHistory.

Мне нужно выбрать отзывы всех пользователей за определенный период времени, если эти пользователи осуществили платежи в этом магазине в тот же период времени.

  1. 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)

  2. Select userId, shopId, date from TransactionHistory where date between "01.01.2019" and "01.02.2019"

Итак, у меня есть два набора результатов, и некоторые записи имеют одну и ту же пару (userId, shopId) - это то, что я хочуполучить: все записи из 1 запроса SQL, какие пары (userId, shopId) присутствуют в запросе 2 SQL.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

Если я правильно понял, все, что вам нужно, это оператор соединения, подобный следующему:

   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)
0 голосов
/ 23 апреля 2019
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
...