Selecting a "widget" and all associated attributes?

Let’s say I have the following three tables:

WIDGETS

[table=“width: 200, class: outer_border”]
[tr]
[td]id[/td]
[td]name[/td]
[/tr]
[tr]
[td]1[/td]
[td]ABC Widget[/td]
[/tr]
[tr]
[td]2[/td]
[td]XYZ Widget[/td]
[/tr]
[/table]

ATTRIBUTES

[table=“width: 200, class: outer_border”]
[tr]
[td]id[/td]
[td]name[/td]
[/tr]
[tr]
[td]1[/td]
[td]Color[/td]
[/tr]
[tr]
[td]2[/td]
[td]Size[/td]
[/tr]
[tr]
[td]3[/td]
[td]Weight[/td]
[/tr]
[/table]

WIDGET_ATTRIBUTES

[table=“width: 200, class: outer_border”]
[tr]
[td]widget_id[/td]
[td]attribute_id[/td]
[td]value[/td]
[/tr]
[tr]
[td]1[/td]
[td]1[/td]
[td]Red[/td]
[/tr]
[tr]
[td]1[/td]
[td]2[/td]
[td]Small[/td]
[/tr]
[tr]
[td]2[/td]
[td]1[/td]
[td]Blue[/td]
[/tr]
[tr]
[td]2[/td]
[td]2[/td]
[td]Large[/td]
[/tr]
[tr]
[td]2[/td]
[td]3[/td]
[td]5 Pounds[/td]
[/tr]
[/table]

Is there an easy way to select all widgets and their associated attributes, one widget per returned row? Example results:

[table=“width: 500, class: outer_border”]
[tr]
[td]widget_id[/td]
[td]widget_name[/td]
[td]Color[/td]
[td]Size[/td]
[td]Weight[/td]
[/tr]
[tr]
[td]1[/td]
[td]ABC Widget[/td]
[td]Red[/td]
[td]Small[/td]
[td]NULL[/td]
[/tr]
[tr]
[td]2[/td]
[td]XYZ Widget[/td]
[td]Blue[/td]
[td]Large[/td]
[td]5 Pounds[/td]
[/tr]
[/table]

You’ll note that widget #1 does not have a weight specified, so NULL would be returned (or blank, whatever).

Perhaps it’s because today is Friday, but I can’t think of how to do this?!?

not one row per widget, no, it’s cumbersome and ugly

much better to do this in your programming language, which has more flexibility for this type of cosmetic re-arranging

My ultimate end result of asking this question is I’m looking to allow for filtering of widget attributes using Sphinx Search. Unfortunately, unless I’m mistaken, Sphinx needs the data to appear within the query used to pull results in order to filter? Hrmm…