【问题标题】:Joining SQL queries with where clause使用 where 子句连接 SQL 查询
【发布时间】:2013-03-19 10:17:41
【问题描述】:

我在 MYSQL 数据库中有 2 个表,如下所示:

克兰特:

ID  Naam           Email    Soort  Status
6   test           test     test2   
7   status test    test     test    20
8   soort test     test     test    
9   soort test 2   test2    Museum  

邮件:

ID  Content                 Datum       Titel 
1   (lots of encoded HTML)  18-03-13    test
2   (lots of encoded HTML)  18-03-13    test2
4   (lots of encoded HTML)  18-03-13    alles weer testen

(是的,我还在测试很多^^)

现在我有一个 SQL 查询,它使用 where 子句从“Klant”中选择所有内容,该子句从上一页获取 ID:

$strSQL = "SELECT * FROM Klant WHERE ID =  '".$_GET["ID"]."' ";  

我想要的是用以下查询加入这个查询:

SELECT ID, Titel FROM Mail; 

编辑:

从你所有的答案和 cmets 我想我开始认为我的问题可能是完全错误的。我会解释我需要它的地方,我什至可能不需要加入?我目前有一个表格,其中包含来自“Klant”的数据,如下所示:

意思是我添加了另一个表,其中包括来自“邮件”的所有 ID 和标题。很抱歉我可能给你造成的困惑,因为我对我的问题不是很清楚。我希望这可以澄清我想要的东西,你们可以告诉我是否需要加入这个或者我可以做其他事情吗?

我还是一名学生,这是我第一次不得不使用 JOIN,但我无法弄清楚。如果有人能告诉我如何做到这一点或将我推向正确的方向,那就太好了!

【问题讨论】:

  • 应该使用哪些列来执行JOIN?我在您的方案中看不到任何内容。
  • 好吧,要加入表格,他们需要有“共同信息”。这意味着,一个表包含一个键(主),该键将在另一个表中作为外键找到。在您的表结构中是这种情况吗(这些 ID 是否链接在一起)?
  • 这两个表的关系键在哪里?
  • 也许他想要一个交叉连接?
  • 邮件表中的 ID 是我假设的邮件的标识符。该表中 klant 的标识符是什么?换句话说,你怎么知道哪个邮件属于哪个klant?我希望邮件表中出现 klant_id 列或类似的内容。

标签: sql join where


【解决方案1】:
SELECT * FROM Klant t1
JOIN
SELECT ID, Titel FROM Mail t2
ON t1.ID = t2.ID
WHERE t1.Name  = 'test'

要获得所需的结果,请执行以下操作:

SELECT * FROM Klant t1
JOIN
SELECT ID, Titel FROM Mail t2
ON t1.ID = t2.ID

如果你想要一个特定的行而不是添加 where 子句:

WHERE t1.ID = 6

WHERE t1.Naam = 'test'

等等

【讨论】:

    【解决方案2】:

    很难看出 JOIN 如何适用于您问题的示例。

    JOIN 让您可以根据关系从多个表中提取信息。据我所知,除非 SteveP 是正确的并且您的 id 提供了这种关系,否则您的表格无法将一行中的一行与另一行中的一行联系起来。

    例如,如果您的 klant 表有一个 mail_id 列,那么您可以这样做

    SELECT *
    FROM klant
    JOIN mail ON klant.mail_id = mail.id
    

    这将为两个表中的每对匹配的行返回一行。或者,您可以使用 LEFT OUTER JOIN 从 JOIN 左侧的表中拉回所有行,并可选择从右侧匹配行中拉回数据。

    如果没有任何东西加入表,您可以使用 CROSS JOIN,它将返回 table1 中每一行与 table2 中每一行的完整笛卡尔。

    人们经常与 JOIN 混淆的东西是 UNION,它允许您编写 2 个 SELECT 语句并返回两个组合/连接在一起的结果集,但这些应该在每个查询中返回相同的列(例如,选择 NULL 代替如果查询不为该列提取数据,则查询中的列)

    【讨论】:

      【解决方案3】:

      我猜你想加入表之间通用的 ID 字段。

      select * from Klant, Mail where Klant.ID = '".$_GET["ID"]."' and Klant.ID = Mail.ID
      

      你也可以这样做

      select * from Klant
        join Mail on  Mail.ID = Klant.ID
        where Klant.ID = '".$_GET["ID"]."'
      

      【讨论】:

        【解决方案4】:

        您可以使用以下查询直接执行此操作:

        select k.ID,k.Naam, k.Email,k.Soort,k.Status, m.ID,m.Titel from Klant k, Mail m where k.ID = m.ID and k.ID = '".$_GET["ID"]."'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多