[英]sql select query using inner join
我想知道為什么我的代碼不起作用。 我正在嘗試僅檢索列表的所有優惠。
CREATE DATABASE IF NOT EXISTS `assignment_db`;
USE `assignment_db`;
CREATE TABLE USER_LIST(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userName VARCHAR(50) NOT NULL,
email varchar(100) NOT NULL,
registeredDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
create table listing_list(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
itemName VARCHAR(50) NOT NULL,
itemDescription VARCHAR(254) NOT NULL,
price DECIMAL(4,2) NOT NULL,
fk_poster_id int references USER_LIST(id),
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
create table offer_list(
id int(6) Unsigned auto_increment Primary key,
offer int,
fk_listing_id int references listing_list(id),
fk_offeror_id int references user_list(id),
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
insert into user_list (userName, email) values ('John','johnnyboi@123.com');
insert into user_list (userName, email) values ('Tom','Tommyboi@123.com');
insert into listing_list (itemName,itemDescription, price) values ( 'Pen', 'A long delicate pen.',' 1.50 ');
insert into listing_list (itemName,itemDescription, price) values ( 'Pencil', 'A long delicate pencil.',' 0.50 ');
insert into offer_list (offer,fk_listing_id,fk_offeror_id) values ('200','2','3');
insert into offer_list (offer,fk_listing_id,fk_offeror_id) values ('200','1','1');
select * from listing_list
inner join offer_list on listing_list.fk_listing_id = offer_list.id;
關於如何解決這個問題的任何想法?
如果我對你的理解正確,你會想要這樣的東西(請參閱此處的小提琴)。 請注意,我更改了一些數字,以便更輕松地遵循查詢流程:
insert into user_list (id, userName, email) values (10, 'John','johnnyboi@123.com');
insert into user_list (id, userName, email) values (20, 'Tom','Tommyboi@123.com');
和
insert into listing_list (itemName,itemDescription, price, fk_poster_id)
values ( 'Pen', 'A long delicate pen.',' 1.50 ', 10);
insert into listing_list (itemName,itemDescription, price, fk_poster_id)
values ( 'Pencil', 'A long delicate pencil.',' 0.50 ', 20);
和
insert into offer_list (offer,fk_listing_id,fk_offeror_id)
values ('200','1', 10);
insert into offer_list (offer,fk_listing_id,fk_offeror_id)
values ('200','2', 20);
然后我運行查詢:
SELECT
u.id,
u.username,
u.email,
l.id,
l.itemName,
l.itemDescription,l.price,
l.fk_poster_id,
l.created_at,
o.offer,
o.fk_listing_id
FROM user_list u
JOIN listing_list l ON u.id = l.fk_poster_id
JOIN offer_list o ON u.id = o.fk_offeror_id;
結果:
id username email id itemName itemDescription price fk_poster_id created_at offer fk_listing_id
10 John johnnyboi@123.com 1 Pen A long delicate pen. 1.50 10 2019-12-23 11:21:10 200 1
20 Tom Tommyboi@123.com 2 Pencil A long delicate pencil. 0.50 20 2019-12-23 11:21:10 200 2
一些結果字段是多余的 - 我把它們留在了,以便你可以看到推理。 我可以建議將來 a) 你不再為 MySQL 打倒引號了——它們不再需要,而且輸入起來很麻煩。 此外,在處理數字值時——即使 MySQL(奇怪地)支持這一點,你沒有將數字放在單引號中——它使 SQL 更難以使用許多 SQL 格式化工具閱讀。
select * from listing_list inner join offer_list on listing_list.id = offer_list.fk_listing_id
您取錯了表名。
有關更多詳細信息,請查看https://www.w3schools.com/sql/sql_join_inner.asp
內連接的基本語法:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
如果您只想選擇表格 1 列表中的數據,您可以這樣做:
SELECT
*
FROM
listing_list
INNER JOIN offer_list ON listing_list.id = offer_list.fk_listing_id
WHERE
listing_list.id = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.