我已经给了两个表,我想解决以下任务:
提供了一个名为@searchValue
的SQL参数,创建一个SQL查询,该查询将返回为名称或描述包含搜索词的公司工作的所有人员。
我研究了https://social.technet.microsoft.com/wiki/contents/articles/19854.tutorial-many-to-many-dimension-example-for-sql-server-analysis-services.aspx和类似How to make SQL many-to-many same-type relationship table之类的问题,但仍无法弄清楚。
我尝试过如下解决问题(1)但是想知道是否建议在作业表中添加job-id
作为主键?
create table Job
(
person_id int,
company_id int,
CONSTRAINT person_cat_pk PRIMARY KEY (person_id, company_id),
CONSTRAINT FK_ person
FOREIGN KEY (person_id) REFERENCES person (person_id),
CONSTRAINT FK_company
FOREIGN KEY (company_id) REFERENCES category (company_id)
);
我也试过解决问题(2):
SELECT * FROM Company WHERE (name LIKE '%' + @searchValue + '%') OR (description LIKE '%' + @searchValue + '%')
然后,问题2中Job表的作用是什么?这个查询是否正确?
答案 0 :(得分:0)
问题是"返回为公司工作的所有人员#34;和"其中名称或描述包含搜索词"。现在,当问题显示"其中名称或描述包含搜索词"时,它表示某个人工作的公司的名称或描述。
因此,很可能,您应该将存储在person表中的人员的person实体作为firstName,lastName,dateOfBirth返回给公司工作,该公司存储在名称或描述与搜索值匹配的Company表中。您的工作表是包含任何为公司工作的人员的详细信息的工作表。这个表通常应该有2个字段,JobStartDate,JobEndDate,也可能是角色,但可能不是问题的一部分。所以,你的查询应该是
SELECT a.firstName, a.lastName, a.dateOfBirth
FROM Person a INNER JOIN Job b ON a.id = b.person_id
INNER JOIN Company c ON b.company_id = c.id
WHERE ((c.name LIKE '%' + @searchValue + '%')
OR (c.description LIKE '%' + @searchValue + '%'))