0

我会编造数据来说明我的问题:我有 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 实际上非常强大,所以我假设这可以通过一个命令来完成。

4

1 回答 1

1

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

select * from clients LEFT OUTER JOIN shippingProfiles ON clients.clientId = shippingProfiles.ID

WHERE clients.username LIKE '%m%' OR --insert other conditions here

于 2013-01-22T04:19:02.303 回答