我有以下的數據庫SQL幫助,試圖得到正確的數據包含在我的結果
-- MYSQL
DROP TABLE IF EXISTS Attributes;
DROP TABLE IF EXISTS LibraryHistory;
DROP TABLE IF EXISTS Library;
CREATE TABLE Library (
iD VARBINARY(16) NOT NULL, -- UUID & PK
name NVARCHAR(500) NOT NULL, -- Name for the entry
contentType NVARCHAR(50) NOT NULL, -- Mime type of data
content LONGBLOB NOT NULL, -- Data a for the entry
subsectionOf VARBINARY(16), -- Library UUID & FK
subsectionOrder INT, -- Oder of Subsections
lastModifiedBy VARBINARY(16), -- User UUID & FK
lastModified DATETIME NOT NULL, -- Last time the record was updated
PRIMARY KEY (`iD`)
);
CREATE TABLE LibraryHistory (
iD VARBINARY(16) NOT NULL, -- UUID & PK
libraryID VARBINARY(16) NOT NULL, -- Library UUID & FK
name NVARCHAR(500) NOT NULL, -- Name for the entry
contentType NVARCHAR(50) NOT NULL, -- Mime type of data
content LONGBLOB NOT NULL, -- Data a for the entry
subsectionOf VARBINARY(16), -- Library UUID & FK
subsectionOrder INT, -- Oder of Subsections
lastModifiedBy VARBINARY(16), -- User UUID & FK
lastModified DATETIME NOT NULL, -- Last time the record was updated
PRIMARY KEY (`iD`)
);
CREATE TABLE Attributes (
iD VARBINARY(16) NOT NULL, -- UUID & PK (Potentially could be removed)
libraryID VARBINARY(16) NOT NULL, -- Library UUID & FK
name NVARCHAR(500) NOT NULL, -- Name of attribute
dataType INT NOT NULL, -- The type of data the attribute holds (int, date, string, etc.)
data NVARCHAR(500) NOT NULL, -- Value of attribute
lastModifiedBy VARBINARY(16), -- User UUID & FK
lastModified DATETIME NOT NULL, -- Last time the record was updated
PRIMARY KEY (`iD`)
);
ALTER TABLE Library ADD CONSTRAINT FK_subsection FOREIGN KEY (subsectionOf) REFERENCES Library(iD);
-- ALTER TABLE Library ADD CONSTRAINT FK_modifier FOREIGN KEY (lastModifiedBy) REFERENCES Users(iD);
ALTER TABLE LibraryHistory ADD CONSTRAINT FK_Hist_Library FOREIGN KEY (libraryID) REFERENCES Library(iD);
ALTER TABLE Attributes ADD CONSTRAINT FK_Attr_Library FOREIGN KEY (libraryID) REFERENCES Library(iD);
-- Example Data
INSERT INTO `Library` VALUES(0x01, 'People', 'text', '', NULL, NULL, NULL, '2011-11-16 20:27:54');
INSERT INTO `Library` VALUES(0x02, 'Jane Doe', 'text', '', NULL, NULL, NULL, '2011-11-16 20:29:13');
INSERT INTO `Library` VALUES(0x03, 'Younger Years', 'text', '', 0x02, 1, NULL, '2011-11-16 00:00:00');
INSERT INTO `Library` VALUES(0x04, 'College Years', 'test', '', 0x02, 2, NULL, '2011-11-16 20:31:52');
INSERT INTO `Library` VALUES(0x05, 'Yale', 'text', '', 0x04, 2, NULL, '2011-11-16 20:32:44');
INSERT INTO `Library` VALUES(0x06, 'Community College', 'text', '', 0x04, 1, NULL, '2011-11-16 20:33:11');
INSERT INTO `Library` VALUES(0x07, 'John Doe', 'text', '', NULL, NULL, NULL, '2011-11-16 20:34:40');
INSERT INTO `Library` VALUES(0x08, 'Planets', 'text', '', NULL, NULL, NULL, '2011-11-16 20:27:54');
INSERT INTO `Library` VALUES(0x09, 'Earth', 'text', '', NULL, NULL, NULL, '2011-11-16 20:27:54');
INSERT INTO `Library` VALUES(0x10, 'Mars', 'text', '', NULL, NULL, NULL, '2011-11-16 20:27:54');
INSERT INTO `Attributes` VALUES(0x01, 0x02, 'TypeOf', 1, 0x01, NULL, '2011-11-16 20:34:40');
INSERT INTO `Attributes` VALUES(0x02, 0x02, 'BirthDate', 2, '19770521', NULL, '2011-11-16 20:34:40');
INSERT INTO `Attributes` VALUES(0x03, 0x02, 'EyeColor', 3, 'Brown', NULL, '2011-11-16 20:34:40');
INSERT INTO `Attributes` VALUES(0x04, 0x07, 'TypeOf', 1, 0x01, NULL, '2011-11-16 20:34:40');
INSERT INTO `Attributes` VALUES(0x05, 0x07, 'BirthDate', 2, '19740521', NULL, '2011-11-16 20:34:40');
INSERT INTO `Attributes` VALUES(0x06, 0x09, 'TypeOf', 1, 0x08, NULL, '2011-11-16 20:34:40');
INSERT INTO `Attributes` VALUES(0x07, 0x10, 'TypeOf', 1, 0x08, NULL, '2011-11-16 20:34:40');
到目前爲止,我有我的查詢看起來像這樣
SELECT `Library`.*, `Attributes`.*
FROM `Library`
LEFT JOIN `Attributes` AS `category` ON `category`.`libraryID`=`Library`.`iD` AND `category`.`name`='TypeOf'
LEFT JOIN `Attributes` ON `Attributes`.`libraryID`=`Library`.`iD` AND `category`.`name`!='TypeOf'
WHERE
(`Library`.`name` = 'People' OR `category`.`data` = (SELECT iD FROM `Library` WHERE `Library`.`name` = 'People'))
我得到3行返回,在所有3行中,Attributes
。*字段爲空。我試圖讓查詢返回4行。 Jane Doe有兩行,每個屬性有一行(BirthDate和EyeColor),我試圖讓John Doe的1行填充BirthDate屬性。我需要做些什麼來獲取每個庫記錄的屬性選擇顯示?
編輯: 當我運行上面的查詢,我得到以下結果
iD name contentType content subsectionOf subsectionOrder lastModifiedBy lastModified iD libraryID name dataType data lastModifiedBy lastModified
01 People text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:27:54 NULL NULL NULL NULL NULL NULL NULL
02 Jane Doe text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:29:13 NULL NULL NULL NULL NULL NULL NULL
07 John Doe text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:34:40 NULL NULL NULL NULL NULL NULL NULL
我想獲得後續的結果
iD name contentType content subsectionOf subsectionOrder lastModifiedBy lastModified iD libraryID name dataType data lastModifiedBy lastModified
01 People text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:27:54 NULL NULL NULL NULL NULL NULL NULL
02 Jane Doe text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:29:13 02 02 BirthDate 2 19770521 NULL 2011-11-16 20:34:40
02 Jane Doe text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:29:13 03 02 EyeColor 3 Brown NULL 2011-11-16 20:34:40
07 John Doe text [BLOB - 0B] NULL NULL NULL 2011-11-16 20:34:40 05 07 BirthDate 2 19740521 NULL 2011-11-16 20:34:40
可我知道爲什麼u使用特定的數據類型'VARBINARY'? bcoz當我運行這個查詢時,它在'ID'列填充空白值 – diEcho
@diEcho - 我使用的是MAMP和phpMyAdmin。 ID列全部爲我工作。當我瀏覽表格(或者運行一個簡單的選擇查詢)時,我會得到列出的正確值。使用VARBINARY是因爲表將從UUID索引,對於我剛剛使用簡單的十六進制數而不是完整的128位UUID的示例數據。 – Justin808