[英]How do you pull all data from a joined table when a related record contains a given value in MySQL?
I have created the following query: 我创建了以下查询:
SELECT wvwcs1.*, wvwcs2.* FROM wvwcs1
inner join wvwcs2 on wvwcs1.id = wvwcs2.wvwcs1_id
inner join wvwcs2 w2 on wvwcs1.id = wvwcs2.wvwcs1_id AND wvwcs2.value LIKE '%ee%'
My tables are created like so: 我的表是这样创建的:
CREATE TABLE `wvwcs1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`form_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COMMENT=' ';
CREATE TABLE `wvwcs2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`wvwcs1_id` int(10) unsigned NOT NULL,
`value` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=latin1;
The data, as an example just using two records: 以数据为例,仅使用两个记录:
mysql> select * from wvwcs1;
+----+---------+
| id | form_id |
+----+---------+
| 1 | 23 |
| 2 | 24 |
+----+---------+
2 rows in set (0.00 sec)
mysql> select * from wvwcs2;
+----+-----------+-------+
| id | wvwcs1_id | value |
+----+-----------+-------+
| 1 | 1 | aa |
| 2 | 1 | bb |
| 3 | 1 | cc |
| 4 | 2 | aa |
| 5 | 2 | cc |
| 6 | 2 | dd |
| 7 | 2 | ee |
+----+-----------+-------+
2 rows in set (0.00 sec)
What I need to do, is to select all the records from wvwcs2
where ONE of the records in wvwcs2
is a given value. 我需要做的是从
wvwcs2
中选择所有记录,其中wvwcs2
中的一条记录是给定值。 So, assume that we want to select records where wvwcs2.value
= dd
. 因此,假设我们要选择
wvwcs2.value
= dd
记录。 In this case, we would get returned: 在这种情况下,我们将返回:
+----+-----------+-------+
| id | wvwcs1_id | value |
+----+-----------+-------+
| 4 | 2 | aa |
| 5 | 2 | cc |
| 6 | 2 | dd |
| 7 | 2 | ee |
+----+-----------+-------+
When I run this query currently, it gives me all records. 当前运行此查询时,它会提供所有记录。 I thought I would need to do an inner join on the same table, but I must be off.
我以为我需要在同一张桌子上做一个内部联接,但是我必须离开。 I am stumped.
我感到难过。
Try this: 尝试这个:
SELECT A.*, C.form_id
FROM wvwcs2 A JOIN
(SELECT DISTINCT wvwcs1_id FROM wvwcs2 WHERE LOWER(`value`) LIKE '%dd%') B
ON A.wvwcs1_id=B.wvwcs1_id
LEFT JOIN wvwcs1 C
ON A.wvwcs1_id=C.id;
See Demo on SQL Fiddle . 请参阅SQL Fiddle上的演示 。
Probably this is what you want here: 这可能是您想要的:
SELECT A.*, B.*
FROM wvwcs1 A JOIN wvwcs2 B ON A.id = B.wvwcs1_id
WHERE A.id IN
(SELECT wvwcs1_id FROM wvwcs2 WHERE value like '%ee%');
See Demo on SQL Fiddle (based on cdaigas initial work) 请参阅有关SQL Fiddle的演示 (基于cdaigas的初始工作)
After the first comment the easiest solution seems to be the following (no need to join anything here at all): 发表第一个评论后,最简单的解决方案似乎是以下操作(根本不需要在此处加入任何内容):
SELECT * FROM wvwcs2 WHERE wvwcs1_id IN
(SELECT wvwcs1_id FROM wvwcs2 WHERE value like '%ee%');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.