Как выбрать songnames.id
из songs
таблицы, указав songnames.name
и мультипликатор artists.name
, которые связаны с songnames.id
в songs
таблице?Как выбрать songnames.id из таблицы композиций в этой конкретной макете базы данных?
CREATE TABLE songnames (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
alias VARCHAR(255)
) ENGINE = 'InnoDB' DEFAULT CHARSET = 'UTF8';
CREATE TABLE artists (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL
) ENGINE = 'InnoDB' DEFAULT CHARSET= 'UTF8';
CREATE TABLE songs (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
artist_id INT UNSIGNED NOT NULL REFERENCES artists(id) ON UPDATE CASCADE ON DELETE CASCADE,
songname_id INT UNSIGNED NOT NULL REFERENCES songnames(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(artist_id, songname_id)
) ENGINE = 'InnoDB' DEFAULT CHARSET = 'UTF8';
songs table: artists table:
+----+-----------+-------------+ +----+---------------+
| id | artist_id | songname_id | | id | name |
+----+-----------+-------------+ +----+---------------+
| 1 | 1 | 1 | | 1 | Matt White |
+----+-----------+-------------+ +----+---------------+
| 2 | 2 | 2 | | 2 | Keyshia Cole |
+----+-----------+-------------+ +----+---------------+
| 3 | 3 | 3 | | 3 | Nitty Kutchie |
+----+-----------+-------------+ +----+---------------+
| 4 | 4 | 3 | | 4 | Lukie D |
+----+-----------+-------------+ +----+---------------+
| 5 | 5 | 4 | | 5 | Sia |
+----+-----------+-------------+ +----+---------------+
songnames table:
+----+--------------+--------------+
| id | name | alias |
+----+--------------+--------------+
| 1 | Love | NULL |
+----+--------------+--------------+
| 2 | Love | NULL |
+----+--------------+--------------+
| 3 | Love | Must Be Love |
+----+--------------+--------------+
| 4 | The Greatest | NULL |
+----+--------------+--------------+
This SQL Fiddle является то, что я играл с до сих пор, я просто не могу найти способ, чтобы выбрать songname_id
по данным artists.name
и songnames.name
.
Это, кажется, работает:
SELECT DISTINCT
songnames.id
FROM songs
JOIN songnames ON songs.songname_id = songnames.id
JOIN artists ON songs.artist_id = artists.id
WHERE songnames.name = 'Love' AND artists.name = 'Matt White'
Но мне нужно что-то похожа на (это один явно не исполняет):
SELECT DISTINCT
songnames.id
FROM songs
JOIN songnames ON songs.songname_id = songnames.id
JOIN artists ON songs.artist_id = artists.id
WHERE songnames.name = 'Love' AND artists.name = 'Lukie D' AND artists.name = 'Nitty Kutchie'
Как выбрать songnames.id
(ID 3) из стол songs
, указав songnames.name
('Любовь') и (несколько) artists.name
('Lukie D', 'Nitty Kutchie')?
Спасибо, что это именно то, что я пытаюсь выяснить! – phew