Я использую MySQL и есть 3 таблицы, как так:msyql сравнения значений двух полей в подзапрос
Create Table users (
firstName VARCHAR,
lastName VARCHAR,
userName VARCHAR,
email VARCHAR,
created DATETIME, etc.
Create Table data_2013 (
uid VARCHAR,
d1 INT,
d2 INT,
d3 INT, etc
Create Table data_2016 (
uid VARCHAR,
d1 INT,
d2 INT,
d3 INT, etc
uid
в двух таблицах данных соответствуетuserName
поле вusers
таблицеКаждый пользователь присутствует в таблице
users
дважды (или больше), но всегда с соответствующимиfirstName
иlastName
.Подмножество этих пользователей (около 100) имеет данные в обеих таблицах «data_xxxx».
Для данных 2013 года номер
userName
представляет собой 8-значную строку. Для данных в 2016 годуuserName
является их текущим адресом электронной почты (который не обязательно тот же, который использовался в 2013 году).
я могу получить все пользователи, имеющие данные для 2016 Вт/запрос, как это:
SELECT firstName,lastName,userName
FROM users
WHERE created > '2016-01-01'
AND userName IN(SELECT uid FROM data_2016)`
Но то, что я хочу сейчас запрос, который дал бы мне список пользователей, по userName
, которые имеют данные за 2013 год. Однако, как я уже сказал, userName
(или uid
) не соответствует, однако значения .
мне нужно что-то вроде этого, в псевдокоде:
SELECT userName
FROM users
WHERE created < '2014-01-01'
and firstName,lastName IN (
SELECT firstName,lastName
FROM users
WHERE created > '2016-01-01'
AND userName IN(SELECT uid FROM data_2016))
Я уверен, что союз или присоединиться ответ, но я не могу понять это.
Любые советы?
Благодаря
EDIT
Вот некоторые примеры данных из users
таблицы:
+------------------------+-----------+----------+------------------------+---------------------+ | userName | firstName | lastName | email | created | +------------------------+-----------+----------+------------------------+---------------------+ | rwhite | ROBERT | WHITE | [email protected] | 2013-08-05 13:13:23 | | [email protected] | Robert | White | [email protected] | 2016-10-23 20:26:52 | +------------------------+-----------+----------+------------------------+---------------------+
Пример выше данных пользователя 2013:
+--------+---------------------+----+----+----+----+----+ | uid | created | d1 | d2 | d3 | d4 | d5 | +--------+---------------------+----+----+----+----+----+ | rwhite | 2013-08-05 13:24:24 | 38 | 31 | 7 | 22 | 46 | +--------+---------------------+----+----+----+----+----+
Пример выше пользователей х 2016:
+--------------------+---------------------+----+----+----+----+----+ | uid | created | d1 | d2 | d3 | d4 | d5 | +--------------------+---------------------+----+----+----+----+----+ | [email protected] | 2016-10-24 12:37:29 | 38 | 48 | 59 | 71 | 17 | +--------------------+---------------------+----+----+----+----+----+
EDIT2
Я забыл, что у меня был 4-й таблицу, которая имеет дополнительные данные для некоторых клиентов:
Create Table users_custA (
userName VARCHAR,
id_num VARCHAR,
etc.
)
и пример того же пользователя в этой таблице:
+--------------------+-----------+
| userName | id_num |
+--------------------+-----------+
| rwhite | N0|
| [email protected] | N0|
+--------------------+-----------+
Это id_num
является guara чтобы быть уникальным для данного человека (т., R White - один человек с двумя записями в таблице users_custA
).
Вопрос остается тем же: как я могу построить запрос, который генерирует список имен пользователей, имеющих данные в обеих таблицах data_xxxx?
ли у вашего data_ * столов ПгвЬЫате и LastName поля? – Nerdwood
Покажите нам, что какой-то образец станет более полезным. – Blank
data_ * таблицы имеют только эти поля: uid, d1..dN, созданный – atreyu