所以也许有人可以帮我把头围在适当的SQL语句上,以获得所需的结果。
因此,我正在使用“ SELECT * FROM invoices” sql语句从数据库调用一个名为“ invoices”的表。 (我使用通配符是因为我要提取所有数据,它大约有8行。)
我已为该项目添加了一项功能,其中有3种不同的帐户类型。 “营销,IT和安全性”反映在“帐户”表的一栏中。
因此,accounts表将包含2列,我们需要了解这些列才能完成所需的任务。
我们有充当主键的“帐户ID”和充当帐户类型的“部门”。
发票具有“关联帐户”列,该列是特定发票所属帐户的“帐户ID”值。
比方说,我想显示“营销”部门的所有发票。是否可以使用SQL语句来完成此操作,或者是否需要以其他方式构造它。
我不太了解JOIN和UNION查询,所以我想在这里问。
答案 0 :(得分:1)
您可以尝试以下方法:
select a.Department,i.InvoiceID from #Accounts AS a
INNER JOIN #Invoice AS i ON a.AccountID = i.AssociatedAccountID
WHERE a.Department = 'Marketing'
请根据需要修改表名和列名。
在您的情况下,如果将INNER JOIN
应用于Account ID
上的两个表,则只会得到与invoices
相关的Account ID
,并且可以将其缩小到每个Account ID
通过使用WHERE
子句。
UNION
在这里不适用。仅当您要从两个结构相似的表中检索相似的数据时,才使用UNION
。
答案 1 :(得分:1)
在关系数据库中,您通常需要以有意义的方式将表连接在一起。因此,关键字“ join”。 听起来正是您想要的。
这听起来也不错,因为您似乎已经了解了将主键和外键将表绑定在一起的重要性。
也许类似的方法可以解决问题(我怀疑您在发票表中有一个名为account_id的外键):
SELECT *
FROM invoices
INNER JOIN accounts ON invoices.account_id = accounts.account_id
我将从阅读以下内容开始: https://www.w3schools.com/sql/sql_join_inner.asp
答案 2 :(得分:1)
Select * from Invoices where AccountId,Account_Name in (Select AccountId,Account_Name from Accounts where Account_Name ='Marketing');
这表示存在于“客户”表中的所有“行销”客户的所有发票数据。并且,该联接用于联接两个相关的表(尽管大多数不是强制性的),并且用于联合,当两个表具有相同的列数和类型时,联接也起作用。
答案 3 :(得分:0)
您采用的结构化方式将行得通,但是通过任何想象力,它不一定是最佳结构。 (如果该表将反映该名称,则将其重命名为“部门”,等等。)
SELECT invoices.*
FROM invoices
INNER JOIN accounts on invoices.accountID = accounts.accountID
WHERE accounts.Department = 'Marketing'
通过说“发票。*”表示您仅显示发票表中的数据。
通过在两个表的关联字段上进行内部联接,您将仅返回两个表中都存在的数据(即在帐户表中创建了具有任何部门的发票)。
声明您只希望在where子句中看到“营销”,然后将那些合并的结果过滤到仅符合该条件。