SQL извлечение IDS на основе двух общих столбцов - PullRequest
1 голос
/ 14 января 2020

Мне нужно выяснить, как я могу выполнить sh эту задачу, которая была мне дана, вы видите, я импортировал Excel, очистил информацию и использовал эту информацию, чтобы начать объединять нужные мне таблицы, когда я начал, я понял, что мне нужно сделать это очень точно, поэтому мне нужен был идентификатор данных, которые я использую, которые не входят в этот документ Excel, который я импортировал (так как идентификатор хранится в базе данных, а Excel был создан другие люди, которые не работают с базами данных), поэтому у меня есть напарник, которого я спросил о том, как выполнить эту задачу, он сказал мне, чтобы сделать общее объединение по столбцам совместно, но то, как я это сделал, оказалось ошибкой и логически не не работает, поэтому я подумал, что извлечение идентификатора из таблицы, в которой они хранятся, было бы хорошей идеей (ну, может быть, нет), но я не знаю, как это сделать, и если это будет работать, я дам вам несколько примеров как бы выглядели таблицы:

table 1 
----------------------
|ID|column_a|column_b|
|1 |2234    |3       |
|2 |41245   |23      |
|3 |442     |434     |
|4 |1243    |1       |
----------------------

table 2 
---------------------------------
|creation_date|column_a|column_b|
|1/12/2018    |2234    |3       |
|4/31/2011    |41245   |23      |
|7/22/2014    |442     |434     |
|10/14/2017   |1243    |1       |
---------------------------------

как видите, значения столбцов a и b идеально совпадают, поэтому можно сделать ставку на бридж В двух таблицах я попытался объединить данные по столбцу а, но не сработал, так как вывод был намного больше, чем нужно, я также попытался выполнить простой запрос с оператором IN, но тоже не сработал, так как вывел почти все базы данных дублированы (я работаю с большими базами данных, таблица 1 содержит около 35 000 строк, а таблица 2 содержит около 10 000), извлекающая объявления id, если они были файлами строк, не будет работать, поскольку они сильно отличаются от того, что в Таблицы идентификаторов в фактической таблице, с которой я работаю, так как вы думаете, что будет лучшим способом для достижения этой задачи? любая помощь, я был бы благодарен, спасибо заранее.

РЕДАКТИРОВАТЬ

Основываясь на ответе R3_, я попробовал его запрос, но приспособился к моим потребностям и работал в в некоторых случаях, но в других я получил декартово произведение, пример, который я использую, это то, что у меня есть в таблице 2 в column_a число 1000, а column_b имеет номер 1, таблица 1 имеет 10 идентификаторов для этой комбинации чисел, начиная с 1000-1 число не одно и то же (технически это так, но оно хранило различную информацию и обычно различается по идентификатору), поэтому на выходе получается либо 10 строк (при условии, что он выбирает только те, у кого есть id), либо 450, а не 45, которые мне нужны, так как результат, запрос, который я использую, выглядит следующим образом:

SELECT DISTINCT table_1.id, table_2.column_a, table_2.column_b --if i pick the columns from table 1 returns 10 rows if i pick them from table 2 it returns 450
    FROM            table_2
    INNER JOIN      table_1 ON table_2.column_a = table_1.column_a AND table_1.column_b = table_2.column_b
    WHERE           table_2.column_a = 1022 AND table_2.column_b = 1

, так что большое дело связано с 10 id, который имеет эту комбинацию 1000-1, поэтому sql не знает, как определить, где идентификатор должен go, как я могу получить те 45, которые мне нужны?

также я выяснил, что если я делаю общий запрос, то пропускаются некоторые строки, вот как я его печатаю : * 1 015 *

SELECT       table_1.id, table_1.column_a, table_1.column_b 
FROM         table_2 --in this case i try switching the columns i return from table 1 or 2
INNER JOIN   table_1 ON table_2.column_a = table_1.column_a AND table_2.column_b = table_1.column_b

вывод последнего примера - 2666 строк и должен быть 2733, что я делаю не так?

1 Ответ

2 голосов
/ 14 января 2020
SELECT DISTINCT -- Adding DISTINCT clause for unique pairs of ID and creation_date
ID, tab1.column_a, tab1.column_b, creation_date  
FROM [table 1] as tab1
LEFT JOIN [table 2] as tab2 -- OR INNER JOIN
ON tab1.column_a = tab2.column_a
AND tab1.column_b = tab2.column_b
-- WHERE ID IN ('01', '02') -- Filtering by desired ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...