通过表和其他表执行搜索与 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 中的外键连接的内容以及如何对数据进行排序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在SQL Server中创建标识表和开发项目表

sql server中的用户临时表和全局临时表的区别

SQL Server 中的临时表和表变量有啥区别?

VB.NET 2010 和 SQL Server 2008 与 ADO.NET 问题

SQL Server 临时表和表变量系列之选择篇

SQL server 创建触发器详解