Ich bin bei einem meiner Testfälle auf ein seltsames Problem gestoßen, das ich nicht erklären kann. Es läuft darauf hinaus, dass eine Abfrage, die 1 Zeile zurückgeben sollte, stattdessen Null zurückgibt.
Dies ist die Abfrage, die fehlschlägt.
SELECT roles.id FROM `roles`
INNER JOIN `accounts_roles` ON `roles`.id = `accounts_roles`.role_id
WHERE (`roles`.`id` = 9)
AND (`accounts_roles`.account_id = 6 ) LIMIT 1;
11:24:07 [SELECT - 0 row(s), 0.001 secs] Empty result set fetched
Und das ist der Teil, den ich nicht erklären kann.
Wenn ich die roles.id
a *
Ich kann sehen, dass es dort Daten gibt.
SELECT * FROM `roles`
INNER JOIN `accounts_roles` ON `roles`.id = `accounts_roles`.role_id
WHERE (`roles`.`id` = 9)
AND (`accounts_roles`.account_id = 6 ) LIMIT 1;
id name authorizable_type authorizable_id created_at updated_at account_id role_id created_at updated_at
-- ----- ----------------- --------------- ------------------- ---------- ---------- ------- ------------------- ----------
9 owner Couple 1 2010-11-30 11:13:31 (null) 6 9 2010-11-30 11:13:31 (null)
Warum sollten die von mir ausgewählten Spalten einen Unterschied in der Gesamtzahl der zurückgegebenen Zeilen machen?
Dies sind die beiden fraglichen Tabellen:
describe roles;
COLUMN_NAME COLUMN_TYPE IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA
----------------- ----------- ----------- ---------- -------------- --------------
id int(11) NO PRI (null) auto_increment
name varchar(40) YES (null)
authorizable_type varchar(30) YES (null)
authorizable_id int(11) YES MUL (null)
created_at datetime YES (null)
updated_at datetime YES (null)
describe accounts_roles;
COLUMN_NAME COLUMN_TYPE IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA
----------- ----------- ----------- ---------- -------------- -----
account_id int(11) YES MUL (null)
role_id int(11) YES MUL (null)
created_at datetime YES (null)
updated_at datetime YES (null)