第一桌 - 产品表
P_ID P_Name D_Flag
37 keyboard N
38 mouse N
39 hardisk Y
40 pendrive Y
41 printer Y
42 CD-DVD Y
43 cardreader Y
和第二个表 Product_Detail 表
P_ID P_ID P_Prize P_Company D_Flag
11 37 600 Intex N
12 38 200 Enter N
13 39 1000 XYZ N
14 40 200 SONY Y
15 41 5000 LG Y
然后输出应该像--------> ProductList 表
P_Name P_Prize P_Company
hardisk -- --
pendrive 200 SONY
printer 5000 LG
CD-DVD -- --
cardreader -- --
注意 - 因此,表ProductList包含Product.D_Flag ='Y'的产品名称(P_Name),产品奖品(P_Prize)和产品公司(P_Company),并且选择表Product_Detail中的那些字段,其中Product_Detail.D_Flag ='Y'。否则值应为null。
答案 0 :(得分:1)
这应该这样做:
SELECT p.p_name, pd.p_prize, pd.p_company
FROM product p
LEFT JOIN product_detail pd ON p.p_id = pd.p_id AND pd.d_flag = 'Y'
WHERE p.d_flag = 'Y'
所以你正在做的是选择product
中的每一行,而WHERE子句将它限制为d_flag
设置为Y的那一行。
然后你就是左外连接,这意味着你得到左边的所有行(在产品中)和右边的product_detail中的任何交叉点。连接条件与行匹配,但仅与详细信息表中的d_flag
为“Y”的行匹配。当你否定外连接时,这不会放在WHERE子句中(你不会得到没有连接的行)。
答案 1 :(得分:1)
SELECT P.p_name, Case When PL.p_prize is Null Then "--" Else PL.p_prize END,
Case When PL.p_company is Null Then "--" ELSE PL.p_company
FROM Product P
LEFT JOIN Product_Detail PL ON P.p_id = PL.p_id AND PL.d_flag = 'Y'
WHERE P.d_flag = 'Y'
答案 2 :(得分:1)
select p_name,decode(b.d_flag,'N',null,p_prize) p_prize,decode(b.d_flag,'N',null,P_Company) P_Company
from product a,product_detail b
where a.p_id=b.p_id;
答案 3 :(得分:0)
SELECT a.P_NAME,
COALESCE(b.P_Prize, '--') Prize,
COALESCE(b.P_Company, '--') CompanyName
FROM Product a
LEFT JOIN product_Detail b
ON a.P_ID = b.P_ID AND
a.D_FLAG = 'Y' AND
b.D_FLAG = 'Y'
-- WHERE additional conditions here
要进一步了解联接,请访问以下链接: