This is a suggested structure for your project. May be it will be an articles table in your case instead of books or anything else that authors and co-authors are related to. By this way, it will be much easier to do query on your data after :
SQL Fiddle
MySQL 5.5.32 Schema Setup:
CREATE TABLE books
(`id` int, `title` varchar(5));
INSERT INTO books
(`id`, `title`)
VALUES
(1, 'book1'),
(2, 'book2'),
(3, 'book3'),
(4, 'book4');
CREATE TABLE authors
(`id` int, `name` varchar(8));
INSERT INTO authors
(`id`, `name`)
VALUES
(1, 'Ronnie'),
(2, 'Razor'),
(3, 'Taz'),
(4, 'Baron'),
(5, 'vinay'),
(6, 'karthick'),
(7, 'earl'),
(8, 'gopal'),
(9, 'webster'),
(10, 'karthick'),
(11, 'arun'),
(12, 'ming'),
(13, 'sanjeev');
CREATE TABLE type
(`id` int, `type` varchar(9));
INSERT INTO type
(`id`, `type`)
VALUES
(1, 'author'),
(2, 'co-author');
CREATE TABLE wrote
(`id` int, `book_id` int, `author_id` int, `type_id` int);
INSERT INTO wrote
(`id`, `book_id`, `author_id`, `type_id`)
VALUES
(1, 1, 1, 1),
(2, 2, 2, 1),
(3, 3, 3, 1),
(4, 4, 4, 1),
(5, 1, 5, 2),
(6, 2, 6, 2),
(7, 3, 7, 2),
(8, 4, 8, 2),
(9, 1, 8, 2),
(10, 2, 9, 2),
(11, 3, 10, 2),
(12, 4, 11, 2),
(13, 1, 11, 2),
(14, 2, 12, 2),
(15, 3, 5, 2),
(16, 4, 13, 2);
This is your actual data :
Query 1:
SELECT b.id, a.name as author, group_concat(co.name) as co_authors
FROM books b
INNER JOIN wrote wa ON wa.book_id = b.id AND wa.type_id = 1
INNER JOIN authors a ON wa.author_id = a.id
INNER JOIN wrote wco ON wco.book_id = b.id AND wco.type_id = 2
INNER JOIN authors co ON wco.author_id = co.id
GROUP BY b.title, a.name
Results:
| ID | AUTHOR | CO_AUTHORS |
|----|--------|-----------------------|
| 1 | Ronnie | arun,vinay,gopal |
| 2 | Razor | webster,ming,karthick |
| 3 | Taz | earl,karthick,vinay |
| 4 | Baron | sanjeev,gopal,arun |
This is what you are trying to do.
Note AND a.id in (1,4); where id 1 is Ronnie and id 4 is Baron :
Query 2:
SELECT co.name as coauthor
FROM books b
INNER JOIN wrote wa ON wa.book_id = b.id AND wa.type_id = 1
INNER JOIN authors a ON wa.author_id = a.id AND a.id in (1,4)
INNER JOIN wrote wco ON wco.book_id = b.id AND wco.type_id = 2
INNER JOIN authors co ON wco.author_id = co.id
GROUP BY co.name
HAVING count(co.name) > 1
Results:
| COAUTHOR |
|----------|
| arun |
| gopal |