簡體   English   中英

當相關記錄在MySQL中包含給定值時,如何從聯接表中提取所有數據?

[英]How do you pull all data from a joined table when a related record contains a given value in MySQL?

我創建了以下查詢:

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%'

我的表是這樣創建的:

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;

以數據為例,僅使用兩個記錄:

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)

我需要做的是從wvwcs2中選擇所有記錄,其中wvwcs2中的一條記錄是給定值。 因此,假設我們要選擇wvwcs2.value = dd記錄。 在這種情況下,我們將返回:

+----+-----------+-------+
| id | wvwcs1_id | value |
+----+-----------+-------+
|  4 |         2 | aa    |
|  5 |         2 | cc    |
|  6 |         2 | dd    |
|  7 |         2 | ee    |
+----+-----------+-------+

當前運行此查詢時,它會提供所有記錄。 我以為我需要在同一張桌子上做一個內部聯接,但是我必須離開。 我感到難過。

嘗試這個:

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;

請參閱SQL Fiddle上的演示

這可能是您想要的:

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%');

請參閱有關SQL Fiddle的演示 (基於cdaigas的初始工作)

發表第一個評論后,最簡單的解決方案似乎是以下操作(根本不需要在此處加入任何內容):

SELECT * FROM wvwcs2 WHERE wvwcs1_id IN 
   (SELECT wvwcs1_id FROM wvwcs2 WHERE value like '%ee%');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM