Объединение таблиц с ИЛИ (повторяющиеся данные) - SQL Server 2005 - PullRequest
2 голосов
/ 03 декабря 2010

Во-первых, чтобы разобраться с контекстом, я пытаюсь написать запрос на SQL Server 2005. Ниже приведена структура моей таблицы

Schema1.Table1
GUID 
1
2
3

Schema2.Table2
GUID MAINTITLE
1    Water Monkies
2    Water Doggies  

Schema3.Table3
GUID MAINTITLE
3    Water Hyrdas

Ожидаемое поведение - пользователь будет искать «Вода», а ячтобы получить все GUID в Schema1.Table1, сопоставьте их с записями в Schema2.Table2 и Schema3.Table3, где GUID в списке И MAINTITLE, как '% WATER%'

Я должен добиться этого с помощью JOINS.

То, что я сделал до сих пор:

select Schema1.Table1.GUID
from  Schema1.Table1 JOIN Schema2.Table2 ON Schema1.Table1.GUID = Schema2.Table2.GUID
JOIN Schema3.Table3 ON Schema1.Table1.GUID = Schema3.Table3.GUID

, но это возвращает результат AND, который не дает мне результатов

Затем я попытался

select distinct Schema1.Table1.GUID
from Schema1.Table1, Schema2.Table2, Schema3.Table3
where (Schema2.Table2.GUID=Schema1.Table1.GUID OR Schema3.Table3.GUID=Schema1.Table1.GUID 
) AND (Schema2.Table2.MAINTITLE like '%water%' OR Schema3.Table3.MAINTITLE like '%water%')

но так как это подразумеваемое соединение, оно возвращает все строки таблицы2, где maintitle таблицы3 тоже как вода.

Могу ли я попросить помощи, пожалуйста?

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Вы можете попробовать использовать LEFT JOIN и ISNULL

select  Schema1.Table1.GUID,
        ISNULL(Schema2.MAINTITLE, Schema3.MAINTITLE)
from    Schema1.Table1 LEFT JOIN
        Schema2.Table2  ON  Schema1.Table1.GUID = Schema2.Table2.GUID LEFT JOIN 
        Schema3.Table3 ON Schema1.Table1.GUID = Schema3.Table3.GUID
WHERE   ISNULL(Schema2.MAINTITLE, Schema3.MAINTITLE) LIKE '%blabla%'

A UNION ALL кажется лучшим вариантом, но это тоже может сработать.

Также обратите внимание на использование COALESCE (Transact-SQL) вместо ISNULL

1 голос
/ 03 декабря 2010

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

select T1.GUID
from T1 join (T2 union all T3) as T on T1.GUID=T.GUID
where T.MAINTITLE like '%WATER%'

возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...