通过表和其他表执行搜索与 SQL Server 中的外键连接的内容以及如何对数据进行排序 [关闭]
Posted
技术标签:
【中文标题】通过表和其他表执行搜索与 SQL Server 中的外键连接的内容以及如何对数据进行排序 [关闭]【英文标题】:Perform search through table and through other tables what are conected with foreign key in SQL Server and how to sort data [closed] 【发布时间】:2019-11-27 16:49:21 【问题描述】:第一次做如此复杂的搜索查询,所以如果你能建议我最好的方法。我有餐桌保险:
+---------+-------+---------+-------+----------+----------+-----------+-----------+-----------+--------+
|policy_ID|USERID |INSURANCE| PRICE |START_DATE|END_DATE |POLICY_TYPE|EMPLOYE |NOTE |GROUPID |
+---------+-------+---------+-------+----------+----------+-----------+-----------+-----------+--------+
| 1 | 1 | 1 | 1000 |2019-11-27|2019-11-27|1 |1 |OUR CLIENT.|1 |
| 6 | 2 | 2 | 10500 |2019-11-27|2019-11-27|2 |2 |OUR CLIENT.|1 |
| 2 | 3 | 3 | 1000 |2019-11-27|2019-11-27|5 |3 |OUR CLIENT.|2 |
| 3 | 4 | 4 | 120020|2019-11-27|2019-11-27|4 |4 |OUR CLIENT.|1 |
| 4 | 5 | 5 | 500 |2019-11-27|2019-11-27|4 |5 |OUR CLIENT.|1 |
| 5 | 6 | 6 | 750 |2019-11-27|2019-11-27|5 |6 |OUR CLIENT.|2 |
| 7 | 7 | 7 | |2019-11-27|2019-11-27|5 |4 |OUR CLIENT.|1 |
+---------+-------+---------+-------+----------+----------+-----------+-----------+-----------+--------+
在这个表中,我有外键 insurance、policy_type 和 employee。 UserID 是某种外键,但我没有声明它。用户 id 可以是普通人或公司,信息列 groupID 1 = 普通用户 2 = 公司。
在我的 ASP.NET 搜索表单中,我创建了搜索文本框和过滤器作为下拉列表保险、policy_type、员工和价格范围,也许我会添加一些日期范围。
现在有个大问题:您将如何通过该表和所有其他具有外键的表执行搜索?我将在网格视图中显示结果。对于其他表,我不会搜索所有列,可能只是一两列,如姓名或姓氏。我也想按活动和非活动政策排序。活动策略是 end_date > current_day。
其他表格如下:
客户 // 公司 // 员工
|client_ID|NAME |SURNAME|ETC|
+---------+-----+-------+---+
| 1 |John |Doe | |
| 6 |John |Doe | |
| 2 |John |Doe | |
+---------+-----+-------+---+
保险 // 公司
+---------+-----+
|client_ID|NAME |
+---------+-----+
| 1 |John |
| 6 |John |
| 2 |John |
+---------+-----+
感谢您的帮助。
编辑 1
你能建议我如何做逻辑或 SQL 查询吗? 问候编辑 2
所以我决定首先查看是否可以在 Insurance_Policy 表中找到搜索词,并使用内部连接更改外键。如果有结果,用 IF 子句 O 计数。
我的第一个问题解决了,我的查询如下所示:
declare @term nvarchar(50)
set @term='something';
if (SELECT COUNT (*) FROM Police WHERE policy_ID LIKE '%'+@term+'%' OR note LIKE '%'+@term+'%')>0
BEGIN
SELECT p.policy_ID,CONCAT(c.name,' ',c.surname) as client,p.price,p.start_date,p.end_date,pt.name,CONCAT(e.name,' ',e.surname)as employee,i.name,p.note
FROM Insurance_Policy p
INNER JOIN
Clients c
ON p.userID=c.client_ID
INNER JOIN
Policy_Type pt
ON p.policy_type=pt.typeID
INNER JOIN
Employees e
ON p.employee=e.employeeID
INNER JOIN
Insurance i
ON p.insurance=i.insuranceID
WHERE p.groupID=1 AND (p.policy_ID LIKE '%'+@term+'%' OR p.note LIKE '%'+@term+'%')
UNION
SELECT
p.policy_ID,co.name,p.price,p.start_date,p.end_date,pt.name,CONCAT(e.name,' ',e.surname)as employee,i.name,p.note
FROM Insurance_Policy p
INNER JOIN
Companies co
ON p.userID=co.client_ID
INNER JOIN
Policy_Type pt
ON p.policy_type=pt.typeID
INNER JOIN
Employees e
ON p.employee=e.employeeID
INNER JOIN
Insurance i
ON p.insurance=i.insuranceID
WHERE p.groupID=1 AND (p.policy_ID LIKE '%'+@term+'%' OR p.note LIKE '%'+@term+'%')
END
我要处理的下一个问题是,如果此表中没有字符串,那么我需要在其他表中搜索并获取结果。
任何建议都会很棒。希望我的问题现在更清楚了
【问题讨论】:
不太确定您期望在这里得到什么答案?!?!?你在问如何写一个where子句?您是在问如何编写.net 代码? 我期待有人告诉我你使用什么逻辑来解决这类问题。我正在研究的想法是制作临时表并在该表中搜索?如果您想帮助我编写代码,那么我更喜欢带有 .net 的 where 子句。 您是说您不知道如何编写 where 子句,或者您需要帮助来解决这个问题?到处都有很多搜索查询的例子。而且我们在这里帮不上什么忙,因为您的要求太模糊了。您基本上编写了一个查询,其中包含要显示或过滤的信息的表的连接。然后添加 where 子句来查找您要查找的值。 【参考方案1】:很难准确地说出你想要什么。您正在尝试加入两个不同的表,一个有姓氏,一个没有姓氏。在这种情况下,您将需要两个单独的查询,然后将它们合并在一起。从您的描述中我可以得出最好的结论,这听起来像这样:
SELECT c.name, c.surname, op.* --actually list columns you want
FROM Insurance_Policy op
INNER JOIN
Clients c
ON op.user_id = c.client_id
WHERE op.Group_ID = 1
UNION
SELECT co.name, NULL, op.* --actually list columns you want
FROM Insurance_Policy op
INNER JOIN
companies co
ON op.user_id = co.client_id
WHERE op.Group_ID = 2
【讨论】:
这对我有帮助。我把解决方案放在编辑中 此问题已标记为已关闭。你不会在这里得到更多的答案。在这里接受我对这个问题的回答,然后发布一个新问题,但要努力澄清你在问什么。以上是关于通过表和其他表执行搜索与 SQL Server 中的外键连接的内容以及如何对数据进行排序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章