【问题标题】:SQL - Retrieving Data from two related tables based on a value entered by a userSQL - 根据用户输入的值从两个相关表中检索数据
【发布时间】:2013-06-20 22:58:16
【问题描述】:

我正在尝试根据用户输入的值从两个独立但相关的表(它们之间有一个外键)中获取数据。以textBox11为例,如果输入值,我的SQL语句是:

SQLCommandText = "select Invoice_Name.Inv_Nu, Invoice_Name.Price, Invoice_Name.IDate, AddInfo.Case_Nu, AddInfo.PaperName, AddInfo.Page_Nu, AddInfo.Case_Type, AddInfo.Size from Invoice_Name full outer join AddInfo on Invoice_Name.L_Name = " + "'" + textBox11.Text + "'";

这似乎无法正常工作,我似乎无法找出原因。

我有两张桌子:

Invoice_Name
------------
Inv_Nu
L_Name
Price
IDate

AddInfo
-------
Inv_Nu
Case_Nu
PaperName
PageNumber
Case_Type
Size

我希望用户输入L_Name 并让程序返回 L_Name 等于该值的两个表中的所有信息。这里的外键是取自 Invoice_Name 表的 Inv_Nu。

测试数据:

Invoice_Name: 
Inv_Nu | L_Name | Price | IDate
01064 | Rami Isleem | 215 | 19/6/2013

AddInfo:
Inv_Nu | Case_Nu | PaperName | Page_Nu | Case_Type | Size
01064 | 100/20 | Alra'i | 21 | abc | 2x8

【问题讨论】:

  • 请告诉我们到底发生了什么!您是否收到错误消息?结果集是空的吗?是不完整的吗?你查案件吗?并被警告:这会打开很多潜在的 SQL 注入问题!!!
  • 除非你能解释为什么你有一个完整的外连接,否则把它改成内连接。
  • 不能解决您的问题,但仍然很重要:使用参数化查询来避免 SQL 注入!!!
  • 似乎返回了我表中的所有数据
  • 用户参数,你会平安。

标签: c# sql database join


【解决方案1】:

您必须加入Inv_NU 上的两个表并过滤Invoice_Name.L_Name = textBox11.Text

"select Invoice_Name.Inv_Nu, Invoice_Name.Price, Invoice_Name.IDate, 
        AddInfo.Case_Nu, AddInfo.PaperName, AddInfo.Page_Nu, 
        AddInfo.Case_Type, AddInfo.Size 
   from Invoice_Name 
   left join AddInfo on Invoice_Name.Inv_NU = AddInfo.Inv_NU
  where Invoice_Name.L_Name = " + "'" + textBox11.Text + "'";

不要使用FULL OUTER JOIN,而是使用LEFT JOIN,因为您要过滤Invoice_Name 行,然后加入AddInfo 行。

【讨论】:

  • 尝试使用L_Name 值直接在数据库中执行它,您知道它应该返回结果。
  • 空结果集甚至直接来自数据库:S
  • 结果应该是什么?
  • 一堆值,我上面提到的每一列都有一个值。我插入的随机测试值只是为了测试 sql 语句。
  • 粘贴那些测试行,以及您在问题中选择的 L_Name 所需的结果,然后应该很容易找到解决方案。
猜你喜欢
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
相关资源
最近更新 更多