SQL-запрос к таблицам JOIN, имеющим разные значения

Я столкнулся с ситуацией, когда мне нужно объединить две таблицы на основе столбцов, имеющих разные значения.

Например.

  • Table1 has column T1
  • Table2 has column T2

  • T1 has 100 rows with value P

а также

  • T2 has 50 rows with value N а также50 rows with value P

I want to join table Table1 with value P with Table2 that has values N as well as P

Он должен дать мне всего 100 записей.

3
Что вы пробовали ? Это базовый SQL, поэтому, пожалуйста, разместите свой текущий запрос и объясните, что не работает.
добавлено автор Oded, источник
Какие СУБД вы используете? Вы хотите видеть эти столы бок о бок?
добавлено автор Hamlet Hakobyan, источник
Какие СУБД вы используете? Вы хотите видеть эти столы бок о бок?
добавлено автор Hamlet Hakobyan, источник
Я не смог найти синтаксис. Следовательно, havent собирает любые материалы, чтобы опубликовать здесь. Если вы знаете, пожалуйста, помогите.
добавлено автор shakti, источник
Я не смог найти синтаксис. Следовательно, havent собирает любые материалы, чтобы опубликовать здесь. Если вы знаете, пожалуйста, помогите.
добавлено автор shakti, источник
Оба поля t1 и t2 имеют одинаковый символ типа данных. Но здесь я хочу присоединиться к записям, имеющим значение t1 как «P», с данными из другого столбца таблицы t2, имеющего значения как «P» и «N».
добавлено автор shakti, источник
Оба поля t1 и t2 имеют одинаковый символ типа данных. Но здесь я хочу присоединиться к записям, имеющим значение t1 как «P», с данными из другого столбца таблицы t2, имеющего значения как «P» и «N».
добавлено автор shakti, источник
нет, я хочу видеть его как одну таблицу. Столбцы должны быть рядом.
добавлено автор shakti, источник
нет, я хочу видеть его как одну таблицу. Столбцы должны быть рядом.
добавлено автор shakti, источник

5 ответы

Попробуй это:

SELECT 
  t1.t1, 
  t2.t2
FROM Table1 t1
INNER JOIN Table2 t2 ON t2.t2 IN('N', 'P')
WHERE T1.t1 = 'p';
  • Предикат IN ('N', 'P') получит значения t2 из таблицы2, которые имеют значения N и P .

  • Предложение WHERE получит значения t1 из tabale1, где значение P , вы можете перенести этот предикат на JOIN .

1
добавлено

Попробуй это:

SELECT 
  t1.t1, 
  t2.t2
FROM Table1 t1
INNER JOIN Table2 t2 ON t2.t2 IN('N', 'P')
WHERE T1.t1 = 'p';
  • Предикат IN ('N', 'P') получит значения t2 из таблицы2, которые имеют значения N и P .

  • Предложение WHERE получит значения t1 из tabale1, где значение P , вы можете перенести этот предикат на JOIN .

1
добавлено

A cross join повторяет каждую строку в правой таблице для каждой строки в левой таблице. Затем вы можете указать любые «несвязанные» условия в предложении where :

select  *
from    Table1 t1
cross join
        Table2 t2
where   t1.col1 = 'N'
        and t2.col1 in ('N', 'P')
0
добавлено

A cross join повторяет каждую строку в правой таблице для каждой строки в левой таблице. Затем вы можете указать любые «несвязанные» условия в предложении where :

select  *
from    Table1 t1
cross join
        Table2 t2
where   t1.col1 = 'N'
        and t2.col1 in ('N', 'P')
0
добавлено

In your scenario any join will act as a cross join since you have many duplicates in both tables (Table1 with 100 rows of 'P' and Table2 with 50 rows of 'P'),

select  t1.*,t2.*
from    Table1 t1
join    Table2 t2
where   t1.field1 = 'N'
        and t2.field1 IN ('N', 'P')

И ваше требование получить только 100 строк невозможно. Потому что первая строка «P» в таблице 1 будет соединена с 50 строками таблицы2 с «P», и поэтому вы получите 50 строк для каждой строки таблицы. И если вы действительно хотите 100 строк, тогда поставьте LIMIT OR TOP в качестве условия фильтра.

Надеюсь, это поможет вам !!!

0
добавлено
По умолчанию join находится внутреннее соединение . A cross join должно быть записано :)
добавлено автор Andomar, источник
t1 join t2 даст синтаксическую ошибку для отсутствующего предложения on . Вы правы, что t1 join t2 on 1 = 1 и t1 cross join t2 даст тот же результат.
добавлено автор Andomar, источник
да @Andomar отредактирован. Но так или иначе в этом случае внутреннее и крестовое соединение даст тот же результат правильно? Вещи, которые я выписал, правильны. Pls дает обратную связь, если что-то не так.
добавлено автор Mari, источник
default является внутренним соединением, но запись как «join» также сделает работу правильно? @Andomar
добавлено автор Mari, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)