запрос mysql через 2 таблицы

#mysql

#mysql

Вопрос:

У меня есть одна база данных с двумя таблицами:

таблица 1: «резервное копирование 1»

таблица 2: «резервное копирование 2»

обе таблицы имеют структуру, подобную

 id, backupid, userid, backup, info
  

Я хотел бы выполнить простой запрос MYSQL, чтобы получить группу записей, где
он показывает мне, что userid найдено в table1 , а также в table2 , чтобы увидеть, какие пользователи делали резервные копии в обеих таблицах

Я знаю, что мог бы открыть table1, найти userid и выполнить другой MYSQL, чтобы посмотреть, есть ли он также в table2 , но я надеюсь, что есть более простой способ сделать это с помощью одного запроса.

Комментарии:

1. SELECT b1.userid FROM backup1 b1 JOIN backup2 b2 ON b1.userid = b2.userid

Ответ №1:

 SELECT userid
FROM backup1
INNER JOIN backup2
USING(userid)
  

Внутреннее соединение в userid поле приведет к тому, что запрос вернет только строки, которые найдены в обеих таблицах.

Комментарии:

1. Хотя это работает, меня пугает отсутствие явного определения столбцов для сопоставления (В.userid= b.userid), аналогично использованию страшного ЕСТЕСТВЕННОГО СОЕДИНЕНИЯ. Может быть, это просто моя собственная природа OCD как администратора базы данных, но я всегда ошибаюсь в том, чтобы быть явным при использовании объединений. 1 хотя бы потому, что этот подход работает.

2. Вам нужно будет указать, из какой таблицы извлекать электронную почту. как backup1.email

3. спасибо — ВЫБЕРИТЕ r1.userid, r1.email ИЗ резервной копии 1 как r1, ВНУТРЕННЮЮ резервную копию 2 как r2, ИСПОЛЬЗУЯ (uidid) — выполнили задание. сначала это тоже не сработало… только когда я сказал AS (просто backup1 r1), ничего не сделал

Ответ №2:

Это не через «2 базы данных», это через «2 таблицы». Просто используйте соединение.

 SELECT a.userid
from backup1 a
inner join backup2 b
on a.userid=b.userid
  

Это даст вам все идентификаторы пользователей в backup1, которые также существуют в backup2

Комментарии:

1. ваш выглядит очень похожим на «Bad Wolfs: решение», но когда я попробовал urs, очень странно, что я не получил никакого результата от моего phpmyadmin. даже ошибки нет. просто обновите страницу pma, где я ввел команду SQL.

Ответ №3:

если вам нужно только знать, сделал ли пользователь резервную копию в обеих таблицах, вы могли бы просто использовать простые select инструкции. Простой пример, использующий временную переменную @uId для хранения идентификатора пользователя, которого вы хотите проверить, и две временные переменные для хранения (логического) ответа для каждой таблицы

 set @uId = 1; -- The user Id
select
    @b_t1 := (select count(*) from table1 where userId=@uId) > 0 as hasBackupOnTable1,
    @b_t2 := (select count(*) from table2 where userId=@uId) > 0 as hasBackupOnTable2,
    @b_t1 and @b_t2 as hasBackupOnBothTables;
  

Комментарии:

1. Вы делаете этот способ более сложным, чем это должно быть.

2. Никогда не говорил, что это будет самый простой способ, просто что это сработает