我有這三個表:SQLite的select語句翻出所有值雖然它不應該
CREATE TABLE "item" (
"itemID" INTEGER PRIMARY KEY ,
"itemName" VARCHAR(25),
buyerID INTEGER REFERENCES buyer(buyerID),
sellerID INTEGER REFERENCES seller(sellerID)
);
CREATE TABLE buyer(
buyerID INTEGER PRIMARY KEY UNIQUE NOT NULL,
fname VARCHAR(25),
lname VARCHAR(25),
itemID INTEGER,
FOREIGN KEY (itemID) REFERENCES item(itemID)
);
CREATE TABLE seller(
sellerID INTEGER PRIMARY KEY UNIQUE NOT NULL,
fname VARCHAR(25),
lname VARCHAR(25),
itemID INTEGER,
FOREIGN KEY (itemID) REFERENCES item(itemID)
);
Item table has:
1|Poly|1|1
2|Jute|2|2
3|Salt|3|3
Buyer Table has:
1|Buyer1|Polybuyer|1
2|Buyer2|Jutebuyer|2
3|Buyer3|Saltbuyer|3
SellerTable has:
1|Seller1|Polyseller|1
2|Seller2|Juteseller|2
3|Seller3|Saltseller|3
現在我想做的事情,我想在ITEMNAME和相關的姓氏和名字選擇查詢買家和賣家。假設我想要鹽和買家和賣家的名單。我會查詢:
SELECT buyer.fname, buyer.lname, itemName, seller.fname, seller.lname
FROM buyer, seller, item
WHERE item.itemID = 3;
我會想到這回:
Buyer3|Saltbuyer|Salt|Seller3|Saltseller
而是我得到:
Buyer1|polybuyer|Salt|Seller1|polyseller
Buyer1|polybuyer|Salt|Seller2|juteseller
Buyer1|polybuyer|Salt|Seller3|saltseller
Buyer2|jutebuyer|Salt|Seller1|polyseller
Buyer2|jutebuyer|Salt|Seller2|juteseller
Buyer2|jutebuyer|Salt|Seller3|saltseller
Buyer3|saltbuyer|Salt|Seller1|polyseller
Buyer3|saltbuyer|Salt|Seller2|juteseller
Buyer3|saltbuyer|Salt|Seller3|saltseller
所以我在哪裏搞亂?這是一個糟糕的數據庫設計還是壞的查詢或兩者兼而有之?非常感謝你提前。
FOREIGN KEY約束僅用於*更改數據庫時;在查詢中,您必須手動編寫聯接。 –
或者使用USING加入指定的公共列,結果只剩下一個。 NATURAL JOIN爲所有常見的列做了這些。 – philipxy