Sql 在子查询中仅返回一行
我正在执行以下查询以在Laravel视图上显示这些记录Sql 在子查询中仅返回一行,sql,postgresql,Sql,Postgresql,我正在执行以下查询以在Laravel视图上显示这些记录 $companies = DB::select(DB::raw("SELECT ( SELECT f.name FROM fields f WHERE f.id = ( SELECT fc.field_id FROM c_f fc WHERE fc.company_id = c.id ) )field, c.name, c.email, (
$companies = DB::select(DB::raw("SELECT (
SELECT f.name FROM fields f WHERE f.id = (
SELECT fc.field_id FROM c_f fc WHERE fc.company_id = c.id
)
)field, c.name, c.email, (
SELECT name as country FROM countries WHERE id = (SELECT country_id from states WHERE id = (SELECT state_id from cities WHERE id = (SELECT city_id from addresses WHERE id = c.address_id)))
)country,
(
SELECT name as state_name FROM states WHERE id = (SELECT state_id from cities WHERE id = (SELECT city_id from addresses WHERE id = c.address_id))
)states, (
SELECT name as city FROM cities WHERE id = (SELECT city_id from addresses WHERE id = c.address_id)
)city
FROM companies c WHERE c.user_id = 1"));
我对这条线有意见
SELECT name as city FROM cities WHERE id = (SELECT city_id from addresses WHERE id = c.address_id)
因为在我的数据库中有很多同名的城市,所以它抛出了一个错误,(可能与州的情况相同,但错误是在城市抛出的。在这种情况下,我试图在子查询的末尾添加限制1,但它给了我一个错误,所以我想我不能在子查询中使用限制
这就是我试图改变的
SELECT name as city FROM cities WHERE id = (SELECT city_id from addresses WHERE id = c.address_id LIMIT 1)
这就是桌子的样子
公司
地址
城市
州
国家
我如何解决这个问题?您没有提供示例数据和预期输出:(仍在猜测您的数据结构:
SELECT name as city
FROM cities
inner join addresses on addresses.city_id = cities.id
WHERE addresses.id = c.address_id
您应该将整个查询编写为一个
连接
。如果它返回多行,则很容易看到重复问题的所在。请注意,根据您编写的内容,这并不是因为城市名称相同,因为您从不根据名称进行选择。如果看不到数据结构,则很难确定,但这是正确的应该很接近:
SELECT f.name AS field,
c.name,
c.email,
r.name AS country,
s.name AS states,
m.name AS city
FROM companies c
JOIN c_f fc ON fc.company_id = c.id
JOIN fields f ON f.id = fc.field_id
JOIN addresses a ON a.id = c.address_id
JOIN cities m ON m.id = a.city_id
JOIN states s ON s.id = m.state_id
JOIN countries r ON r.id = s.country_id
我对问题进行了编辑,以显示表的外观以及表上的一些数据,我的预期输出仅为一个城市,子查询返回多行数据reason@pinkWojak,这些都是图片(在编码中几乎总是无用的),不管怎样,代码是正确的。