簡體   English   中英

使用內連接的sql選擇查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM