我有这个查询,它可以正常工作,但是它并不容易阅读,我想知道是否可以通过联接来改进它。当前,我需要手动指定资产表上除一列(特别是id_template)以外的所有列,但我宁愿直接在id字段的顶部加入子查询。不过,我无法解决该怎么做,甚至有可能吗?
public function test_user_notExist_admin()
{
$mock = \Mockery::mock(DownloadController::class, [
'get_download_links_from_download_server' => $this->links,
'post_details_to_log_server' => [200, "new"],
'connect' => [
"Roles" => [
"authenticated",
"subscriber"
]
, "days" => "38"
]
]
)->makePartial();
$this->get('/api/v1/exampledl?uid=1&n_id=400&u_ip=104.58.1.45&dl_id=a81498a9')
->assertStatus(200)
->assertSee('links');
$this->assertDatabaseHas('users', [
'uid' => (int)request('uid'),
'subscription.role' => 'administrator',
]);
}
此处要求以上述形式从JSON查询返回的数据,请以奇怪的名称等为借口来代替测试数据。
SELECT *, (
SELECT to_json(template) AS template
FROM (
SELECT *, (
SELECT json_agg(to_json(fields)) as fields
FROM (
SELECT *
FROM public.fields
WHERE id_template = templates.id
) fields
)
FROM public.templates
WHERE templates.id = assets.id_template
) template
)
FROM public.assets
WHERE assets.id = $1
谢谢!
答案 0 :(得分:2)
看来有点棘手。我自己对Postgres还是陌生的。由于没有任何数据可以测试我的查询,因此我必须像这样提交它。
您的查询包含一些所谓的相关子查询,即,当外部查询的select
语句中有一个子查询时,它们通过{{1}链接}-条款。据我所知,它们可以用左联接代替。这就是我所做的。希望它能工作。如果没有,也许它仍然给您一个新主意。
where