繁体   English   中英

MySQL像单行一样,像多行INNER JOINED表

[英]MySQL Like On One Row, Like on Multiple Row INNER JOINED Tables

我的数据库中有三个表,如下所示:

kill_list
+-----------------------------------------------+
| id |  batch_name  | execution_date  | status  |
+-----------------------------------------------+
| 1  |Shallow Minds |   2013-10-29    |    0    |
+-----------------------------------------------+
| 2  | Brain Dead   |   2013-10-26    |    1    |
+-----------------------------------------------+

kill_list_designation
+------------------------------+
| id |  kill_list    | target  |
+------------------------------+
| 1  |      1        |    1    |
+------------------------------+
| 2  |      1        |    2    |
+------------------------------+
| 3  |      2        |    4    |
+------------------------------+
| 4  |      1        |    5    |
+------------------------------+
| 5  |      2        |    3    |
+------------------------------+

targets
+--------------------------------+
| id |  firstname    | lastname  |
+--------------------------------+
| 1  |      John     |  Smith    |
+--------------------------------+
| 2  |      Mark     |  Hall     |
+--------------------------------+
| 3  |      Kim      |  Stone    |
+--------------------------------+
| 4  |      Rob      |  Reeds    |
+--------------------------------+
| 5  |      Ivan     |  Gay      |
+--------------------------------+

现在,我只能使用此查询对kill_list表上的查询进行搜索

SELECT * 
FROM kill_list 
WHERE batch_name     LIKE CONCAT('%', 'query term', '%') 
   OR execution_date LIKE CONCAT('%', 'query term') 
   OR status         LIKE CONCAT('%', 'query term', '%');

在此查询中,我只能获取终止列表的详细信息,而不能获取列表中包含的目标。 如果我搜索“ Mark ”,则查询应向我提供kill_list #1的详细信息,其中包括Mark。

通过输入术语,我如何能够获得杀死清单的所有目标? 该查询必须能够将术语与目标名称进行比较。 非常感谢!

您将必须为其创建Join。

此结构的简单连接如下所示,

SELECT kl.*, kld.*,t.* FROM kill_list as kl,kill_list_designation as kld,targets as t
WHERE 
kl.id = kld.kill_list
AND
kld.target = t.id

要专门搜索标记,您可以使用

SELECT kl.*, kld.*,t.* FROM kill_list as kl,kill_list_designation as kld,targets as t
WHERE 
kl.id = kld.kill_list
AND
kld.target = t.id
AND 
t.firstname like 'Mark'

SQL字段

这样尝试

SELECT * 
FROM kill_list A
JOIN kill_list_designation B ON A.id=B.kill_list
JOIN targets C ON B.target=C.id
WHERE A.batch_name LIKE CONCAT('%', 'query term', '%') 
   OR A.execution_date LIKE CONCAT('%', 'query term') 
   OR A.status LIKE CONCAT('%', 'query term', '%')
   OR C.firstname LIKE CONCAT('%', 'query term', '%') 
   OR C.laststname LIKE CONCAT('%', 'query term', '%');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM