Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пара вопросов  [new]
Thunder
Member

Откуда:
Сообщений: 10
Здравствуйте, посетители форума SQL.RU...

Пришел к вам с парой вопросов:

У меня есть

CREATE TABLE TITUL (
	ID INT PRIMARY KEY IDENTITY,
  NAME varchar(255) NULL,
);

CREATE TABLE PARENT (
  ID int PRIMARY KEY IDENTITY,
  NAME varchar(255) NOT NULL,
  TITUL int NULL,
  FATHER int NULL,
  MOTHER int NULL,
  DESCR text NULL,
  DATE char(10) DEFAULT '0000-00-00',
  SEX bit DEFAULT 0,
  FOTO varchar(255) NULL,
	CONSTRAINT FK_PARENT_TITUL
		FOREIGN KEY (TITUL) REFERENCES TITUL (ID)
		ON UPDATE CASCADE,
	CONSTRAINT FK_PARENT_FATHER
		FOREIGN KEY (FATHER) REFERENCES PARENT (ID),
	CONSTRAINT FK_PARENT_MOTHER
		FOREIGN KEY (MOTHER) REFERENCES PARENT (ID),
);

CREATE TABLE KITTEN (
  ID int PRIMARY KEY IDENTITY,
  FATHER int NULL,
  MOTHER int NULL,
  DATE char(10) default NULL,
  SEX bit DEFAULT 0,
  FOTO varchar(255) default NULL,
	CONSTRAINT FK_KITTEN_FATHER
		FOREIGN KEY (FATHER) REFERENCES PARENT (ID),
	CONSTRAINT FK_KITTEN_MOTHER
		FOREIGN KEY (MOTHER) REFERENCES PARENT (ID),
);

Это база данных котята-родители-титулы на MS SQL Server 2000.
Заметьте, что родители как и титулы могут быть не указаны, т.е. NULL.
Вопросы:
1) Как получить всех котят с родителями и их титулами? MsSQL мне сказал, что я делаю что-то не так с Join.

SELECT K.SEX AS SEX, K.DATE AS DATE, T1.TITUL AS FATHER_TITUL, P1.NAME AS FATHER_NAME, T2.TITUL AS MOTHER_TITUL, P2.NAME AS MOTHER_NAME 
	FROM KITTEN AS K, TITUL AS T1, PARENT AS P1, TITUL AS T2, PARENT AS P2
		WHERE K.FATHER*=P1.ID AND K.MOTHER*=P2.ID AND P1.TITUL*=T1.ID AND P2.TITUL*=T2.ID

2) ПОчему при добавлении нового родителя в таблицу parents матерится FK_PARENT_FATHER?

Спасибо
21 дек 04, 20:55    [1198199]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов  [new]
Taffy
Member

Откуда:
Сообщений: 20501
2) Вы пытаетесь вставить запись в таблицу "родители" с кодом несуществующего папы. То есть код папы есть, а самого папы в таблице нет
1) А котят только с прямыми родителями, или со всеми предками?
Если только с прямыми родителями, и своими титулами ,то
SELECT K.SEX , K.DATE,
             FATHER_TITUL = T1.TITUL  ,FATHER_NAME = P1.NAME, 
             MOTHER_TITUL = T2.TITUL , MOTHER_NAME = P2.NAME 
FROM KITTEN  K left outer join 
         PARENT P1 on k.father = p1.id left outer join
         TITUL T1 on p1.titul = t1.id left outer join 
         PARENT P2 on k.mother = p2.id left outer join
         TITUL T2 on  p2.titul = t2.id
А ругалось потому что связки в where через *=, эквивалентные left outer join не допускаются "вложенными"
21 дек 04, 21:34    [1198227]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов  [new]
Thunder
Member

Откуда:
Сообщений: 10
Спасибо!
23 дек 04, 16:53    [1205432]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить