我正在尝试使用sql查询为所有只生长番茄(name_id
)的人显示name
和veg_grown
属性,结果显示名称的升序属性。
CREATE TABLE people
(
name_id# CHAR(4) PRIMARY KEY,
name VARCHAR2(20) NOT NULL,
address VARCHAR2(80) NOT NULL,
tel_no CHAR(11) NOT NULL
)
CREATE TABLE area
(
area_id# CHAR(5) PRIMARY KEY,
name_id# REFRENCES people,
area_location_adress VARCHAR2(80) NOT NULL
)
CREATE TABLE area_use
(
area_id# REFERENCES area,
veg_grown VARCHAR (20) NOT NULL
)
但是veg_grown
属性与people
表没有关系,但是人和area_use
表是通过区域表链接的,所以我尝试使用这样的INNER JOIN
混淆了我自己,甚至没有工作:
SELECT
name, name_id
FROM
people
INNER JOIN
area USING (name_id)
SELECT area_id
FROM area
INNER JOIN area_use USING (area_id)
WHERE veg_grown = 'tomato'
ORDER BY name ASC;
当然必须有一种方法可以选择只在SQL查询中生长番茄的name_id
和name
我会接受任何帮助或建议:)谢谢
答案 0 :(得分:1)
AFAICT您只想要所有信息都可用的条目,因此没有左/右连接。
SELECT p.name_id, p.name
FROM people p
JOIN area a
ON p.name_id = a.name_id
JOIN area_use au
ON a.area_id = au.area_id
WHERE au.veg_grown = 'tomato'
ORDER BY p.name ASC
答案 1 :(得分:1)
SELECT p.name, p.name_id
FROM people p
JOIN area a
ON p.name_id = a.name_id
JOIN area_use au
ON a.area_id = au.area_id
AND au.veg_grown = 'tomato'
LEFT JOIN area_use au2
ON a.area_id = au2.area_id
AND au2.veg_grown <> 'tomato'
WHERE au2.area_id IS NULL;
这将使用LEFT JOIN
来查找仅种植西红柿的人。要找到种植西红柿和其他任何东西的人,请移除LEFT JOIN
部分及其下方的所有内容。
编辑:如果您的字段名称在实际表格中包含#
,则需要引用标识符并添加#
,我将其留在此示例中。
答案 2 :(得分:0)
我不是百分之百确定您的数据模型,但这似乎是您尝试做的事情。
SELECT name, people.name_id
FROM people, area, area_use
WHERE area.area_id = area_use.area_id
AND veg_grown = 'tomato'
AND area.name_id = people.name_id
ORDER BY name ASC;