【问题标题】:How do I query for specific data in table A, and then compare a field in A to a field in table B?如何查询表A中的特定数据,然后将A中的字段与表B中的字段进行比较?
【发布时间】:2020-05-08 00:40:17
【问题描述】:

我对 SQL 很陌生,遇到了这个问题:我想在特定条件下从表 A 中获取所有数据,并根据相同条件的字段从表 B 中获取数据。

我正在处理的数据对工作很敏感,因此我将绘制一个示例表。假设表 A 是一张红色扑克牌(红心和方块),有两个区域:

|-----------+---------|  
| card_id   | type    |  
|-----------+---------|  
|     1     | heart   |
|-----------+---------| 
|     2     | heart   |
|-----------+---------|
|     3     | diamond |
|-----------+---------|  
|     4     | heart   |
|-----------+---------|  

假设表 B 具有完全相同的结构,但用于黑色扑克牌(梅花和黑桃)。

|-----------+---------|  
| card_id   | type    |  
|-----------+---------|  
|     1     | club    |
|-----------+---------| 
|     2     | spade   |
|-----------+---------|
|     3     | spade   |
|-----------+---------|  
|     4     | club    |
|-----------+---------| 

现在假设我想选择 A 中的每张红心牌,但每当我找到红心时,我也想选择 B 中的所有梅花。

我想伪代码会是这样的:

SELECT * FROM tableA a JOIN tableB b  
WHERE a.type = "heart"  
(and if tableA.type = "heart",  
also SELECT * in tableB where type = "club.")

我希望看到的输出如下

|-----------+---------|  
| card_id   | type    |  
|-----------+---------|  
|     1     | heart   |
|-----------+---------|  
|     1     | club    |
|-----------+---------| 
|     4     | club    |
|-----------+---------| 
|     2     | heart   |
|-----------+---------|  
|     1     | club    |
|-----------+---------| 
|     4     | club    |
|-----------+---------| 
|     4     | heart   |
|-----------+---------| 
|     1     | club    |
|-----------+---------| 
|     4     | club    |
|-----------+---------| 

抱歉,如果这是一个简单的问题,我找不到与我的这个特定问题相关的任何内容。

【问题讨论】:

  • (1) 用您正在使用的数据库标记您的问题。 (2) 显示你想要的结果。
  • 行的顺序重要吗?
  • 是的,它们应该看起来像那个顺序
  • 哪个版本的 MySQL?

标签: mysql join subquery


【解决方案1】:

您可以使用此查询来获得您想要的结果。它需要hearts 中的tableA 中的所有UNION 以及表A 中每个hearttableB 中的每个clubs 的副本。然后对输出进行排序,首先是heartcard_id,然后是卡的来源(tableAtableB),最后是实际的card_id

SELECT card_id, type
FROM (
  SELECT 'a' as tbl, card_id AS cid, card_id, type
  FROM tableA
  WHERE type = 'heart'
  UNION ALL
  SELECT 'b', a.card_id, b.card_id, b.type
  FROM tableA a
  JOIN tableB b ON a.type = 'heart' AND b.type = 'club'
) c
ORDER BY cid, tbl, card_id

输出:

card_id     type
1           heart
1           club
4           club
2           heart
1           club
4           club
4           heart
1           club
4           club

Demo on dbfiddle

【讨论】:

  • @poppinMartinellis 不用担心 - 我很高兴能帮上忙。
猜你喜欢
  • 2019-04-17
  • 2018-08-10
  • 2012-03-24
  • 2018-11-04
  • 1970-01-01
  • 2014-01-30
  • 2022-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多