Q:

Find all missing mapping table entries

I need to be able to determine all of the people that were missing from attendance in a series of meetings. 
I have a solution to figure this problem out with JS on the client's computer but I think it could be done more efficiently on the server.
Table A (people) -> Table B (attendance) <- Table C(meeting)
The attendance is a mapping table of items in table A and C.
See: http://sqlfiddle.com/#!8/6db81 for the exact schema
What I want is to determine all of the meetings that people have missed. That is there is no entry for that person for that meeting in the attendance table B.
Desired output should include a minimum of the lid (user id) and mid (meeting ID).
lid, firstname, lastname, mid, meeting_title, start.

The solution in JS would be to send the results of a cross of A and C, and the results of B to the client. Then remove all of the items in B from the cross of A and C.
CREATE TABLE IF NOT EXISTS `attendance` (
  `mid` bigint(20) NOT NULL,
  `sid` bigint(20) DEFAULT NULL,
      `entered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lid` varchar(64) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`mid`,`lid`),
  KEY `entered` (`entered`)
);

INSERT INTO `attendance` (`mid`, `sid`, `entered`, `lid`) VALUES
(5, NULL, '2013-12-25 21:44:27', '100'),
(5, NULL, '2013-12-25 21:44:19', '200'),
(5, NULL, '2013-12-25 21:44:21', '300'),
(9, NULL, '2013-12-26 14:49:49', '200'),
(9, NULL, '2013-12-26 07:10:34', '300');

CREATE TABLE IF NOT EXISTS `meetings` (
  `mid` bigint(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(32) CHARACTER SET utf8 NOT NULL,
  `start` datetime NOT NULL COMMENT 'registration start time',
  `stop` datetime NOT NULL COMMENT 'registration stop time',
  PRIMARY KEY (`mid`),
  UNIQUE KEY `title` (`title`)
);

INSERT INTO `meetings` (`mid`, `title`, `start`, `stop`) VALUES
(5, 'Meeting 1', '2013-12-25 01:12:00', '2013-12-25 23:12:00'),
(9, 'Meeting 2', '2013-12-26 01:00:00', '2013-12-26 23:00:00');

CREATE TABLE IF NOT EXISTS `people` (
  `sid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `lid` varchar(64) NOT NULL,
  `firstname` varchar(64) NOT NULL,
  `lastname` varchar(64) NOT NULL,
  `title` varchar(5) DEFAULT NULL,
  `address` varchar(128) DEFAULT NULL,
  `city` varchar(64) DEFAULT NULL,
  `state` varchar(2) DEFAULT NULL,
  `zip` varchar(9) DEFAULT NULL,
  `phone` varchar(12) DEFAULT NULL,
  `cell` varchar(12) DEFAULT NULL,
  `email` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  UNIQUE KEY `sid` (`sid`),
  UNIQUE KEY `lid` (`lid`)
);

INSERT INTO `people` (`sid`, `lid`, `firstname`, `lastname`, `title`, `address`, `city`,  `state`, `zip`, `phone`, `cell`, `email`) VALUES
(1, '100', 'Fred', 'Jones', 'Mr.', 'Somewhere', 'City', 'AK', '12345', '123-123-1234', '123-123-1234', 'email@email.com'),
(2, '200', 'Wilma', 'Jones', 'Mrs.', '', 'City', '', '12346', '', NULL, '');

A:

You have to join people and meetings table to get all possible combinations of meeting id and userid and then filter out only those, which are not present in attendance table.
SELECT a.lid, 
       b.mid 
FROM   people a 
       CROSS JOIN meetings b 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   attendance c 
                   WHERE  c.mid = b.mid 
                          AND c.lid = a.lid); 

Fiddle

