sql - 如何连接两个表但只返回匹配的行

标签 sql oracle11g

我有两个表,一个属性表和一个买家表,我正在尝试编写一个选择脚本,该脚本将显示一个属性列表,这些属性的房间数与指定客户所需的房间数相同。

我认为我需要使用内部联接来提取我需要的数据,但由于我对此仍然陌生,所以我有点困惑。我写的选择脚本如下,

SELECT DISTINCT Buyer.Buyer_Surname, Buyer.Rooms_Needed, Property.Property_Address as Property_for_sale, Property.Num_Rooms as Property_No_of_Rooms
FROM Buyer
INNER JOIN Property 
ON Property.Buyer_ID = Buyer.Buyer_ID
WHERE Buyer.Rooms_Needed = '5'
AND Property.Num_Rooms = '5'
AND Buyer.Buyer_ID = '70000';

然而,它告诉我没有选择任何行,但我知道有一个买家需要 5 间卧室,并且数据库中有 3 处特性有 5 间卧室。

这是我的表格;

CREATE TABLE Buyer 
(
Buyer_ID varchar(5) NULL,                           
Viewing_Data varchar2(50),                          
Maximum_Budget varchar2(50),                        
Purchase_Price varchar2(50),                        
Purchase_Date DATE,                                 
Buyer_Forename varchar2(50),                        
Buyer_Surname varchar2(50),                         
Buyer_Address varchar2(50),                         
Buyer_Town varchar2(50),                            
Buyer_Postcode varchar2(10),
Rooms_Needed varchar2(10),
Seller_ID Varchar2(5),
Staff_ID varchar2(5),
PRIMARY KEY (Buyer_ID),
FOREIGN KEY (Staff_ID) REFERENCES Staff(Staff_ID),
FOREIGN KEY (Seller_ID) REFERENCES Seller(Seller_ID)
); 

CREATE TABLE Property 
(
Property_ID varchar(5),                              
Property_Address varchar(25),
Property_Town varchar(25),
Property_Postcode varchar(25),                       
Asking_Price varchar2(20),                           
Date_Registered DATE,                                
Property_Type varchar2(50),                          
Num_Rooms varchar2(50),                              
Buyer_ID varchar(5),                                 
Seller_ID varchar(5),                                
Branch_ID varchar(5),                                
PRIMARY KEY (Property_ID),                           
FOREIGN KEY (Buyer_ID) REFERENCES Buyer(Buyer_ID),
FOREIGN KEY (Seller_ID) REFERENCES Seller(Seller_ID),
FOREIGN KEY (Branch_ID) REFERENCES Branch(Branch_ID)
);

最佳答案

您正在选择买家和属性(property) ID。如果这些排列一致,你会很幸运,但你的结果仍然不正确。要加入房屋拥有买家想要的房间数量的表,您需要加入房间数量:

SELECT DISTINCT Buyer.Buyer_Surname, Buyer.Rooms_Needed, 
    Property.Property_Address as Property_for_sale, Property.Num_Rooms as   
    Property_No_of_Rooms
    FROM Buyer
    INNER JOIN Property 
    ON Buyer.Rooms_Needed = Property.Num_Rooms;

如果需要按房间数过滤,还可以在末尾附加 WHERE:

... WHERE Buyer.Rooms_Needed = 5;

关于sql - 如何连接两个表但只返回匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732539/

相关文章:

php - SQL varchar 转日期时间

python - 如何使用数据框中的值更好地构造 SQL 语句?

java - JPA Criteria Query with predicate 比较注释@Convert的字段在执行时得到ORA-00932

java - SQL嵌套异常

sql - 无法从 PLSQL 表类型批量收集到表中?

php - 在复杂 MySQL 查询中使用变量

java - 从复杂的 SQL 查询构建 CriteriaQuery

oracle - Windows 的 ins-32025 oracle 11g 错误

mysql - oracle查询中如何去除重复记录

sql - 每周总计唯一序列号