【发布时间】:2020-06-18 09:11:19
【问题描述】:
我在Employee 表中有几个这样的数据库行:
EmpId Name Information
1 Eric {“Experience”: [{“Title”: “Assistant Accountant”, “Company”: “ComA”, “YearsOfExperience”: 3}, {“Title”: “Accountant”, “Company”: “ComB”, “YearsOfExperience”: 2}], “EmployedYear”:2016}
2 John {“Experience”: [{“Title”: “Tech Engineer”, “Company”: “ComX”, “Years”: 5}, {“Title”: “Senior Tech Engineer”, “Company”: “ComY”, “YearsOfExperience”: 2}], “EmployedYear”:2012}
3 Leonard {“Experience”: [{“Title”: “Junior Engineer”, “Company”: “ComJ”, “Years”: 2}, {“Title”: “Tech Engineer”, “Company”: “ComB”, “YearsOfExperience”: “7”}], “EmployedYear”:2017}
我如何选择没有在 ComB 工作过的员工?
对此有什么查询?到目前为止,由于这个复杂的嵌套 JSON 数组,我一无所获。
我正在尝试:
SELECT Name, Id
FROM Employee
OUTER APPLY OPENJSON(Information, '$.Experience') WITH (
Title nvarchar(max) '$.Title',
Company nvarchar(max) '$.Company',
YearsOfExperience int '$.YearsOfExperience'
) AS [Info]
WHERE [Info].Company != 'ComB'
【问题讨论】:
-
使用
OPENJSON。这个 JSON 并不是特别复杂,所以至少我们为什么你所拥有的东西不起作用。 -
仅供参考,您的 JSON 不使用风格化双引号(
“和”),因为某些解析将无法读取它们。使用非样式化双引号 (")。 -
Eric和Leonard在ComB有工作经验。你确定这个问题(我如何选择没有在 ComB 工作过的员工,在这种情况下他们是 Eric 和 Leonard?)? -
谢谢大家,解决了,我应该用Exist check
标签: sql json sql-server select sql-server-json