【问题标题】:Select rows with JOIN using a subquery使用子查询通过 JOIN 选择行
【发布时间】:2016-03-31 11:04:41
【问题描述】:

嘿,我在使用我使用的查询从数据库中获取正确信息时遇到问题,我有以下数据库:

甲板

PK - ID  - int
Deckname - varchar(255)

卡片

PK - ID      - int
PK Cardname  - varchar(255)
Cardvalue    - int
Amount       - int

现在当我使用以下查询时:

SELECT * FROM Card WHERE ID IN (SELECT ID FROM Card WHERE Cardname = 'pickachu');

其中 Card 表具有以下值:

1    pickachu     50      1
1    charmender   55      2
2    squirtle     65      2

我找回了这些行:

1    pickachu     50      1
1    charmender   55      2

ID = 1 因为pickachu 的ID 为1,我用它来获取ID 为1 的所有卡片。

现在,我还想要牌组名称(卡表中的 ID 1 与牌组中的 ID 1 相关)。

假设我们在 Deck 中有以下值:

1    myFirstDeck
2    mySecondDeck

我现在想得到这个作为回报:

1    pickachu     50      1    myFirstDeck
1    charmender   55      2    myFirstDeck

我一直在尝试使用以下查询来获取此信息:

SELECT Card.*, Deck.Deckname FROM Card INNER JOIN Deck ON (Card.ID = Deck.ID) WHERE Card.Cardname = 'pickachu';

但这只会将pickachu返回给我,而不是我想要的charmender。如何调整此查询以获得所需的结果?

【问题讨论】:

  • 嗯,你的条款说你只想要那些 Cardname 是皮卡丘的人,所以你当然只得到那些。另外为什么两个表都有相互链接的 ID 列? ID 通常是唯一的,例如,如果它链接到甲板表,它应该是 deck_id。

标签: mysql join subquery


【解决方案1】:

sub-query 无法删除。

SELECT c.*, d.Deckname
FROM Card as c INNER JOIN Deck as d ON c.ID = d.ID
WHERE c.ID IN (SELECT ID FROM Card WHERE Cardname = 'pickachu');

【讨论】:

    猜你喜欢
    • 2015-10-02
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多