Как вернуть true / false для каждого значения, если оно появляется в группах в MYSQL? - PullRequest
0 голосов
/ 06 сентября 2018

Моя цель - проверить список значений, присутствуют ли они в определенных группах значений, и ответить на этот вопрос логическим значением true / false, когда отображаются все группы. Вот очень простой пример:

Ниже приведен список имен актеров и фильмов, в которых они появляются: Моя цель - вернуть таблицу, которая содержит следующие столбцы: Название фильма, имя актера и колонка "он играл в фильме"? В таблице результатов видно, что все актеры появляются для каждого фильма, даже если они не воспроизводят его, и отображаются все названия фильмов, даже если в них не было ни одного игрока. При сортировке по названию фильма и под сортировке по имени игрока, большое спасибо за совет,

<!-- 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>
<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code>    <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>

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете перекрестно объединить таблицу с самим собой и использовать оператор 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
...