我会制作数据来说明我的问题:
我有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实际上非常强大,所以我假设可以用一个命令来完成。
答案 0 :(得分:1)
我认为你想要一个左外连接 - 这将尝试将该行连接到所有其他行,但如果它没有进行任何连接,它仍会打印所有字段,只需将null放入来自其他表。
从客户端选择* LEFT OUTER JOIN shippingProfiles ON clients.clientId = shippingProfiles.ID
WHERE clients.username LIKE'%m%'或 - 此处插入其他条件