Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在子查询中仅返回一行_Sql_Postgresql - Fatal编程技术网

Sql 在子查询中仅返回一行

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, (

我正在执行以下查询以在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, (
            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,这些都是图片(在编码中几乎总是无用的),不管怎样,代码是正确的。