【问题标题】:How to return 'true/false' for each value, if it appears at a groups in MYSQL?如果每个值出现在 MYSQL 的组中,如何为每个值返回“真/假”?
【发布时间】:2019-02-12 04:24:20
【问题描述】:

我的目标是检查值列表是否出现在某些值组中,并在显示所有组时以真/假布尔值回答该问题。 这是一个非常简单的例子:

以下是演员名单以及他们出演的电影: 我的目标是返回一个包含以下列的表: 片名,演员名,还有一栏“他在片子里演过吗”? 您可以在结果表中看到,所有演员都出现在每部电影中,即使他们没有播放它,并且所有电影名称都出现了,即使其中没​​有任何播放器。 当按电影名排序,按播放器名次排序时, 非常感谢您的建议,

<!-- begin snippet: js hide: false console: true babel: false -->
    <style type="text/css">
    	table.tableizer-table {
    		font-size: 12px;
    		border: 1px solid #CCC; 
    		font-family: Arial, Helvetica, sans-serif;
    	} 
    	.tableizer-table td {
    		padding: 4px;
    		margin: 3px;
    		border: 1px solid #CCC;
    	}
    	.tableizer-table th {
    		background-color: #104E8B; 
    		color: #FFF;
    		font-weight: bold;
    	}
    </style>
    <table class="tableizer-table">
    <thead><tr class="tableizer-firstrow"><th>Actor</th><th>Movie Name</th></tr></thead><tbody>
     <tr><td>Brad Pitt</td><td>inglourious basterds</td></tr>
     <tr><td>Matt Damon</td><td>Ocean's Eleven</td></tr>
     <tr><td>Leonardo DiCaprio</td><td>The Departed</td></tr>
     <tr><td>Brad Pitt</td><td>Ocean's Eleven</td></tr>
     <tr><td>Matt Damon</td><td>The Departed</td></tr>
     <tr><td>Christoph Waltz </td><td>inglourious basterds</td></tr>
     <tr><td>Leonardo DiCaprio</td><td>The Wolf of Wall Street</td></tr>
    </tbody></table>
    <style type="text/css">
    	table.tableizer-table {
    		font-size: 12px;
    		border: 1px solid #CCC; 
    		font-family: Arial, Helvetica, sans-serif;
    	} 
    	.tableizer-table td {
    		padding: 4px;
    		margin: 3px;
    		border: 1px solid #CCC;
    	}
    	.tableizer-table th {
    		background-color: #104E8B; 
    		color: #FFF;
    		font-weight: bold;
    	}
    </style>
    <table class="tableizer-table">
    <thead><tr class="tableizer-firstrow"><th>Movie Name</th><th>Actor</th><th>did he played?</th></tr></thead><tbody>
     <tr><td>inglourious basterds</td><td>Brad Pitt</td><td>TRUE</td></tr>
     <tr><td>inglourious basterds</td><td>Christoph Waltz </td><td>TRUE</td></tr>
     <tr><td>inglourious basterds</td><td>Leonardo DiCaprio</td><td>FALSE</td></tr>
     <tr><td>inglourious basterds</td><td>Matt Damon</td><td>FALSE</td></tr>
     <tr><td>Ocean's Eleven</td><td>Brad Pitt</td><td>TRUE</td></tr>
     <tr><td>Ocean's Eleven</td><td>Christoph Waltz </td><td>FALSE</td></tr>
     <tr><td>Ocean's Eleven</td><td>Leonardo DiCaprio</td><td>FALSE</td></tr>
     <tr><td>Ocean's Eleven</td><td>Matt Damon</td><td>TRUE</td></tr>
     <tr><td>The Departed</td><td>Brad Pitt</td><td>FALSE</td></tr>
     <tr><td>The Departed</td><td>Christoph Waltz </td><td>FALSE</td></tr>
     <tr><td>The Departed</td><td>Leonardo DiCaprio</td><td>TRUE</td></tr>
     <tr><td>The Departed</td><td>Matt Damon</td><td>TRUE</td></tr>
     <tr><td>The Wolf of Wall Street</td><td>Brad Pitt</td><td>FALSE</td></tr>
     <tr><td>The Wolf of Wall Street</td><td>Christoph Waltz </td><td>FALSE</td></tr>
     <tr><td>The Wolf of Wall Street</td><td>Leonardo DiCaprio</td><td>TRUE</td></tr>
     <tr><td>The Wolf of Wall Street</td><td>Matt Damon</td><td>FALSE</td></tr>
    </tbody></table>

【问题讨论】:

  • 请在此处以纯文本形式发布代码、错误、示例数据或文本输出,而不是难以阅读的图像,不能复制粘贴以帮助测试代码或在答案中使用,并且是那些依赖屏幕阅读器的人的障碍。您可以编辑问题以在问题正文中添加代码。为了便于格式化,请使用{} 按钮标记代码块,或使用四个空格缩进以获得相同的效果。 屏幕截图不能作为代码运行。
  • 编辑您的问题并显示每个表的架构,以及您尝试过的 SQL 语句。如果您按照@tadman 的建议发布文本,我们应该能够提供答案。
  • @SloanThrasher 我已经编辑了我的帖子,希望现在更清楚,谢谢,
  • @tadman 对当前问题有任何想法吗?谢谢!
  • Itay Av,您可能已经编辑了您的帖子,但我没有看到表的架构或您尝试的 SQL 语句。

标签: mysql group-by boolean


【解决方案1】:

您可以将表与自身交叉连接,并在相关查询上使用 exists 运算符:

SELECT a.actor, b.movie, EXISTS (SELECT *
                                 FROM   mytable c
                                 WHERE  a.actor = c.actor AND b.movie = c.movie) AS played
FROM       (SELECT DISTINCT actor FROM mytable) a
CROSS JOIN (SELECT DISTINCT movie FROM mytable) b

【讨论】:

  • 您的解决方案效果很好!我想知道,如果我对“他玩了吗”列感兴趣,“真/假”值出现而不是 1/0 值(出现在您的解决方案中),我试图包装使用“CASE”函数的“played”列,即值为1时,我将显示“true”,否则显示“false” 但是,我在MYSQL中收到错误消息语法错误,需要什么句法?提前致谢,
  • @ItayAv 你可以使用case exists (select ...) when 1 then 'true' else 'false' end
  • 太棒了!我错过了表达式的“结束”,现在它工作正常,感谢您的时间和努力
猜你喜欢
  • 2013-06-14
  • 2018-02-22
  • 2016-05-03
  • 2019-05-26
  • 1970-01-01
  • 2021-10-15
  • 2018-07-29
  • 1970-01-01
相关资源
最近更新 更多