#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. Никогда не говорил, что это будет самый простой способ, просто что это сработает