Как постоянные величины производят НА пункте Соединений?

Можно всегда добавлять"!" в Ваши опции плавающие. Таким образом, латекс пытается действительно трудно разместить число, где Вы хотите его (я главным образом использую [h! ТБ]), расширяя нормальные правила набора.

я нашел другое решение:
Использование плавание - пакет. Таким образом, можно разместить числа, где Вы хотите, чтобы они были.

7
задан Jude Allred 7 October 2009 в 23:18
поделиться

3 ответа

Если таблица людей:

id  name

1   Person One
2   Person Two
3   Person Three
4   Person Four
5   Person Five

Если таблица менеджеров равна

id  name
-1  Admin
2   Manager One
3   Manager Two

, если запрос:

SELECT DISTINCT *
FROM Person LEFT JOIN Manager 
ON (Manager.id = Person.id OR Manager.id = -1)

Тогда результат:

Person One  -1  Admin
Person Two  -1  Admin
Person Two  2   Manager One
Person Three    -1  Admin
Person Three    3   Manager Two
Person Four -1  Admin
Person Five -1  Admin

Здесь все строки людей объединяются с -1 Администратор (в таблице диспетчера) И если такой же идентификатор существует в таблице диспетчера, происходит еще одно соединение.

7
ответ дан 6 December 2019 в 11:50
поделиться

Если в таблице диспетчера нет строки, где идентификатор равен -1, она вообще ничего не делает. Если такая строка есть, то она всегда будет присоединяться к каждой строке в таблице людей. Таким образом, для каждой строки Person вы потенциально можете получить две ros в выводе запроса, одну с manager.id = id человека, а другую со строкой Manager.ID = -1

5
ответ дан 6 December 2019 в 11:50
поделиться

Также вы увидите предложение AND, используемое для дальнейшей фильтрации записей. Это чрезвычайно важно при работе с внешними соединениями, поскольку добавление этих действий фильтрации к предложению where превратит соединение из левого соединения во внутреннее соединение (если только это не что-то вроде, где t.idfield имеет значение null).

Ниже я показываю как это работает и почему важно поместить предложения фильтрации в нужное место.

создать таблицу #test (test1id int, test varchar (10)) создать таблицу # test2 (test2id int, test1id int, test2 varchar (10))

insert into #test (test1id, test)
select 1, 'Judy'
union all
select 2, 'Sam'
union all 
select 3, 'Nathan'

insert into #test2 (test2id, test1id, test2)
select 1,1,'hello'
union all 
select 2,1,'goodbye'
union all 
select 3,2,'hello'

select * from #test t
left join #test2 t2 on t.test1id = t2.test1id
where test2 = 'goodbye'
--result set
--test1id   test    test2id test1id test2
--1 Judy    2   1   goodbye

select * from #test t
left join #test2 t2 on t.test1id = t2.test1id
and test2 = 'goodbye'
--result set 
--test1id   test    test2id test1id test2
--1 Judy    2   1   goodbye
--2 Sam NULL    NULL    NULL
--3 Nathan  NULL    NULL    NULL

Вы можете использовать, где какое-то поле имеет значение NULL (при условии, что вы выбираете поле, которое никогда не будет нулевым), чтобы захватить записи в первой таблице, но не второй такой:

select * from #test t
left join #test2 t2 on t.test1id = t2.test1id
where test2id is null
--result set 
--test1id   test    test2id test1id test2
--3 Nathan  NULL    NULL    NULL
5
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: