【问题标题】:Select query with comma and join用逗号选择查询并加入
【发布时间】:2014-12-30 10:20:22
【问题描述】:

我有下面的 tbl A 和 tbl B,我想得到他们的名字,用逗号分隔,但我没有得到我正在寻找的格式。

http://sqlfiddle.com/#!2/149093/10

用户:1,2,3 ;2 - 我也应该得到名字 A,B,C 然后是 B 但我只得到 A 和 B。 我应该如何获得他们在列用户中的个人姓名并且还满足至少存在 2 的条件。在此先感谢。

预期输出是:

A 的整行
带 B 的整行
使用 C
的整行 A 的整行

基本上是 4 行,因为总共有 4 个用户,他们的名字。

|  USER | CATEGORY | USERNAME |
|-------|----------|----------|
| 1,2,3 |        1 |       A  |
| 1,2,3 |        1 |       B  |
| 1,2,3 |        1 |        C |
|     2 |        1 |        B |

【问题讨论】:

  • 什么是预期输出?问题不清楚

标签: mysql sql select join find-in-set


【解决方案1】:

试试这个:

SELECT a.user, a.category, b.username 
FROM tblA a 
JOIN tblB b ON find_in_set(b.userid,a.user) 
WHERE FIND_IN_SET(2,a.user)
ORDER BY a.user;

查看SQL FIDDLE DEMO

输出

|  USER | CATEGORY | USERNAME |
|-------|----------|----------|
| 1,2,3 |        1 |        A |
| 1,2,3 |        1 |        B |
| 1,2,3 |        1 |        C |
|     2 |        1 |        B |

【讨论】:

  • 这真的很接近,我怎样才能得到 4 行而不是 2 行,您能否解释一下查询。这对我有很大帮助。谢谢
  • 添加了expexted结果。但是你能解释一下上面的查询吗?我为你给出的结果做了很多尝试,但我无法得到结果。谢谢
  • 超级 +1。我忘记加入 created_by_sno 上的另一个表我将在另一个问题中更新它并标记你。请查看它。再次感谢。祝你有美好的一天。
  • 顺便说一下应该是 A B C B 。但它是 ABBC 。我应该如何获得前一个订单?
  • 太棒了。我会及时更新 Q 的信息。谢谢。
【解决方案2】:

你不应该使用

('1,2,3', '1'),
('1,4,5', '2'),
('1,3,5', '3'),

将多个用户添加到同一类别。相反,请使用您在下面已经使用的格式将用户添加到类别:

('1', '1'),
('2', '1');

所以,而不是:('1,4,5', '2'),

使用:('1', '2'), ('4', '5'), ('1', '2'),

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多