Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Не работает SQL запрос


Автор: boroda 22.11.2006, 13:15
Привет Всем!
Наткнулся на ситуацию стало интересно, в общем  
есть структура таблиц 
Код

create table tab1
     (id INT primary key,
      param1 INT,
      param2 INT,
      name varchar(10),
      CONSTRAINT refParam1 foreign key refParam1(param1) references tab2(id),
      CONSTRAINT refParam2 foreign key refParam2(param2) references tab2(id));

create table tab2
(id INT primary key,
 name varchar(10))

которая содержит следующие данные
tab1
id | param1 | param2 | name 
-----------------------------
1  |1       |2       |record1
-----------------------------
2  |1       |1       |record2


tab2
id | name  |
------------
1  | chесk1
------------
2  | check2

и есть запрос 
Код

select tab1.name, tab2.name, tab2.name from tab1, tab2 where 
tab1.id=X and tab1.param1=tab2.id and tab1.param2=tab2.id

если Х=1 я хочу получить
-------------------------
record1 | check1 | check2 
-------------------------

если Х=2, то 
-------------------------
record2 | check1 | check1 
-------------------------
Почему если Х=1 запрос возвращает NULL?

Автор: ТоляМБА 22.11.2006, 13:55
Код
Select tab1.name, tab2.name, TAB2_1.name 
from tab1 inner join tab2 on tab1.param1=tab2.id
inner join tab2 TAB2_1 on tab1.param2=TAB2_1.id
where tab1.id=X

Автор: ТоляМБА 22.11.2006, 14:40
Пример выше на MS SQL 2000. (просто я думал что добавится к предыдущему посту, а создался новый)
----------------------------
А на Акцессе надо добавить скобки:

Код
 Select tab1.name, tab2.name, TAB2_1.name 
from (tab1 inner join tab2 on tab1.param1=tab2.id)
inner join tab2 TAB2_1 on tab1.param2=TAB2_1.id
where tab1.id=X


ЗЫ. Загоните запрос в конструктор и поймете что к чему  smile 

Автор: boroda 22.11.2006, 14:57
Спасибо за совет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)