E.g. :Есть ли способ проверить, равно ли несколько полей из JOIN?
У меня есть запрос:
select coalesce(VV1.[TimeStamp], VV2.[TimeStamp]...) as MyDate, V1, V2, .. VN
from VV1
full join VV2
full join VV3
...
full outer join VVN
on VV1.TimeStamp = VV2.TimeStamp
and VV2.TimeStamp = VV3.TimeStamp
...
and VVN-1.TimeStamp = VVN.TimeStamp
Я хочу, чтобы создать его в виде строки, но это комплекс с on
части ... Так
- Можно ли записать его в лучшую сторону?
- может быть как-то написать
on AllOfThemAreEqual(VV1.TimeStamp, VV2.TimeStamp .. VVN.TimeStamp)
? Но я сомневаюсь, что это возможно :( - Может быть, это возможно, чтобы сохранить предыдущее значение в переменном темпе, а затем извлечь оттуда Этот последний вариант выглядит наиболее реальным для меня
SQLFibble:. http://sqlfiddle.com/#!6/4e138/3/0
CREATE TABLE T1(
[ValueId] [bigint] IDENTITY(1,1) NOT NULL,
[PointId] [int] NULL,
[Value] [int] NULL,
[TimeStamp] [datetime] NULL
);
INSERT INTO T1
([PointId]
,[Value]
,[TimeStamp])
VALUES
(1, 1, 1900-01-01)
INSERT INTO T1
([PointId]
,[Value]
,[TimeStamp])
VALUES
(2, 2, 1900-01-01)
;
и
WITH VV1 AS (
SELECT [TimeStamp], [Value] AS V1 FROM T1
WHERE [PointId] = 1
), VV2 AS (
SELECT [TimeStamp], [Value] AS V2 FROM T1
WHERE [PointId] = 2
)
SELECT
coalesce(VV1.[TimeStamp], VV2.[TimeStamp]) AS dt
, V1, V2
FROM VV1
FULL JOIN VV2
ON VV1.TimeStamp = VV2.TimeStamp
Случаи использования полного внешнего соединения мало, и далеко друг от друга в большинстве реальных приложений. Если вы видите его, в вашей голове должен появиться предупреждающий звонок. Не используйте их легкомысленно. – Tomalak
Почему «FULL OUTER» присоединяется вместо «INNER»? – gvee
INNER не возвращает данные ... они не пересекаются, но «полное соединение» вернет те же данные. – Cynede