Как я могу объединить столбцы, у которых никогда не будет равных значений?

Есть ли способ, которым я слева объединяю 2 таблицы на [Foo.Column1 = x, y или z] И [Bar.Column1 = Q]

Мне нужны данные в запросе из 2 таблиц, которые не имеют равных значений, но я знаю, что если значение в первой таблице является одним из 3 различных значений, которым оно фактически равно.

Итак, могу ли я присоединиться к 2 таблицам, где, если Foo.Column1 содержит указанное значение, а Bar.Column1 содержит отдельное специальное значение, тогда сообщить оператору, что 2 строки должны быть связаны =?

Ни в одной из таблиц нет одинаковых значений.

0
user2125348 13 Мар 2013 в 20:28

1 ответ

Лучший ответ

Определите отношение отображения между значениями в двух таблицах следующим образом:

select *
from Foo
join ( 
  select * from ( values 
    ('A', 'Z'),
    ('B', 'Z'),
    ('C', 'Z'),
  ) MapTable(FooColumn,BarColumn)
) MapTable on MapTable.FooColumn = Foo.Column1
join Bar on Bar.Column1 = MapTable.BarColumn

Если количество строк в MapTable невелико и статично, вы можете даже жестко закодировать их, сделав MapTable подзапросом.

0
Pieter Geerkens 14 Мар 2013 в 00:15
Итак, сначала создайте MapTable в базе данных? Я надеялся пропустить это.
 – 
user2125348
14 Мар 2013 в 00:05
Но как еще вы собираетесь объединить две таблицы без общего поля? Не мое последнее сообщение о жестком кодировании его как подзапроса, если он маленький и статичный.
 – 
Pieter Geerkens
14 Мар 2013 в 00:06
Это было причиной вопроса. Если бы я мог сказать SQL, что значения A, B и C из этой таблицы равны значению X этой таблицы. Может быть, что-то вроде таблицы запроса 1 получит все значения для строк, содержащих A, B или C., а затем во временной таблице замените все эти значения на значение, которое я хочу, чтобы они равнялись из таблицы 2?
 – 
user2125348
14 Мар 2013 в 00:12
Проверить обновление; это в запросе, поэтому может использоваться как динамический SQL
 – 
Pieter Geerkens
14 Мар 2013 в 00:16