SQL JOIN с использованием объединенного поля - PullRequest
1 голос
/ 14 января 2011

У меня есть две таблицы, в Table1 содержится столбец с частичным значением столбца в Table2, например:

Table1.XName = "123456" Table2.ZName = "ABC-123456 "

Мне нужно создать JOIN, который соответствует этим, но с MS-SQL 2008 у меня возникают проблемы с выполнением этой работы.Вот пример моей попытки:

SELECT * FROM Table1 ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Table2 ON ('ABC -' + Table1.XName) = Table2.ZName

Это неНеважно, какой тип JOIN я использую, или в каком направлении он не работает.Я знаю, что делаю что-то здесь с головой, так что если кто-нибудь может указать мне правильное направление, я буду признателен за это.

Ответы [ 3 ]

4 голосов
/ 14 января 2011

Это работает для меня:

DECLARE @Table1 TABLE (XName VARCHAR(200))
DECLARE @Table2 TABLE (ZName VARCHAR(200))

INSERT
INTO    @Table1
VALUES  ('123456')

INSERT
INTO    @Table2
VALUES  ('ABC-123456')

SELECT  *
FROM    @Table1
LEFT JOIN
        @Table2
ON      ZName = 'ABC-' + XName

---

123456  ABC-123456

Не могли бы вы опубликовать определения ваших таблиц и сообщение об ошибке, которое вы получаете?

2 голосов
/ 14 января 2011

Случайное предположение ...

Table1.XName тип данных - это число (не основанное на символах), поэтому вы получаете ошибки преобразования

SELECT * FROM
Table1
LEFT OUTER JOIN
Table2 ON 'ABC-' + CAST(Table1.XName as varchar(30)) = Table2.ZName
1 голос
/ 14 января 2011

Попробуйте использовать

SELECT
  *
FROM
  Table1 LEFT OUTER JOIN Table2 ON
    Table1.XName LIKE CONCAT("%", Table2.ZName, "%") OR
    Table2.XName LIKE CONCAT("%", Table1.ZName, "%")

Пожалуйста, отметьте ответ, если он вам подходит.

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