最简单的数据获取方式

时间:2018-11-20 18:44:40

标签: php sql

所以也许有人可以帮我把头围在适当的SQL语句上,以获得所需的结果。

因此,我正在使用“ SELECT * FROM invoices” sql语句从数据库调用一个名为“ invoices”的表。 (我使用通配符是因为我要提取所有数据,它大约有8行。)

我已为该项目添加了一项功能,其中有3种不同的帐户类型。 “营销,IT和安全性”反映在“帐户”表的一栏中。

因此,accounts表将包含2列,我们需要了解这些列才能完成所需的任务。

我们有充当主键的“帐户ID”和充当帐户类型的“部门”。

发票具有“关联帐户”列,该列是特定发票所属帐户的“帐户ID”值。

比方说,我想显示“营销”部门的所有发票。是否可以使用SQL语句来完成此操作,或者是否需要以其他方式构造它。

我不太了解JOIN和UNION查询,所以我想在这里问。

4 个答案:

答案 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子句中看到“营销”,然后将那些合并的结果过滤到仅符合该条件。