如何返回满足其他表中条件的所有唯一条目?

时间:2013-01-22 04:13:38

标签: mysql select

我会制作数据来说明我的问题: 我有2个表,一个名为clients,另一个名为shippingProfiles

                   clients                           shippingProfiles
    *************************************   *********************************
    * clientId username   emailAddress  *   * clientId  street     town     *
    * * * * * * * * * * * * * * * * * * *   * * * * * * * * * * * * * * * * *
    * 1        james      jdoer@aol.org *   * 1         mole       north    *
    * 2        zac        zmit@aol.org  *   * 1         maple      pleasant *
    * 3        cris       cm@yahoo.org  *   * 3         oak        brook    *
    * 4        john       jg@yahoo.org  *   * 3         taylor     glen     *
    *************************************   *********************************

clients.clientId是唯一的主键。一些客户有多个运输配置文件,其他客户没有。

我想在数据库中搜索其用户名,电子邮件地址,街道或城镇中包含字母“m”的任何客户端。我希望每个唯一的客户端作为一个条目(只有一个条目)返回,显示他们的ID,用户名,电子邮件地址,街道和城镇。如果他们没有街道和城镇,它可以显示null(或类似的东西),如果他们有多个街道和城镇,它可以显示其中任何一个。

这应该是结果:

    *********************************************************
    * clientId  username  emailAddress    street  town      *
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
    * 1         james     jdoer@aol.org   mole    north     *
    * 2         zac       zmit@aol.org    null    null      *
    * 3         cris      cm@yahoo.org    oak     brook     *
    *********************************************************

这些表最终可能每个都有50,000个条目,所以我需要数据库在尽可能少的扫描中执行此操作。

我听说mysql实际上非常强大,所以我假设可以用一个命令来完成。

1 个答案:

答案 0 :(得分:1)

我认为你想要一个左外连接 - 这将尝试将该行连接到所有其他行,但如果它没有进行任何连接,它仍会打印所有字段,只需将null放入来自其他表。

从客户端选择* LEFT OUTER JOIN shippingProfiles ON clients.clientId = shippingProfiles.ID

WHERE clients.username LIKE'%m%'或 - 此处插入其他条件