Errata
The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".
The following errata were submitted by our customers and approved as valid errors by the author or editor.
Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update
Version | Location | Description | Submitted By | Date submitted | Date corrected |
---|---|---|---|---|---|
Safari Books Online | 4. No Duplicates, No Nulls > What's Wrong With Duplicates? (page numbers unavailable for online vers Figure 4-1 and below |
If we eliminate the duplicates by loading P with ('P1', 'Screw'), ('P1', 'Nut'), ('P1', 'Bolt'), ('P2', 'Screw') and SP with ('S1', 'P1'), ('S2', 'P1'), ('S1', 'P2') instead of the duplicate rows we still get varied results for the queries supplied in the book. The results for the 12 candidate SQL formulations when run against the non-duplicate values listed above are, in order: P1 * 3, P2 * 1 P1 * 2, P2 * 1 P1 * 5, P2 * 3 P1 * 6, P2 * 2 P1 * 2, P2 * 2 P1 * 2, P2 * 2 P1 * 2, P2 * 2 P1 * 1, P2 * 1 P1 * 1, P2 * 1 P1 * 3, P2 * 1 P1 * 5, P2 * 3 P1 * 1, P2 * 1 Given that the results are still inconsistent, I have to ask a) are the candidate queries really equivalent and b) if so, what is the problem being caused by duplicates that their elimination would solve? It can't be inconsistent results as the non-duplicate values also product inconsistent results for the candidate queries. Note from the Author or Editor: |
Anonymous | Feb 06, 2014 | |
Printed | Page 17 2nd from last paragraph and last line |
I believe this should refer to Figure 1.3 not Figure 1.1. Note from the Author or Editor: |
Anonymous | Dec 18, 2014 | |
Page 41 Fig. 2.3: A very strange union |
The Y column of the rightmost table is lacking a double underline. |
Thor Michael Støre | Apr 27, 2014 | ||
Printed | Page 120 3rd bullet item |
Delete this bullet item |
![]() C.J. Date |
Feb 08, 2013 | |
Page 132 2nd paragraph (SQL text) |
I think the second instance of "FROM S )" should read "FROM P )". |
paul c | Jan 23, 2013 | ||
Printed | Page 159 Fig. 7.5 |
In Fig. 7.5, the table showing the transitive closure TC appears to be missing the following entry: P1 P6 Here is a little Perl script that shows the correct output, albeit in an order that does not match Fig. 7.5: $ perl erratum.pl PP ____ ____ | PX | PY | |____|____| | P1 | P2 | | P1 | P3 | | P2 | P4 | | P3 | P4 | | P4 | P5 | | P5 | P6 | |____|____| TC ____ ____ | PX | PY | |____|____| | P1 | P2 | | P1 | P3 | | P1 | P4 | | P1 | P5 | | P1 | P6 | | P2 | P4 | | P2 | P5 | | P2 | P6 | | P3 | P4 | | P3 | P5 | | P3 | P6 | | P4 | P5 | | P4 | P6 | | P5 | P6 | |____|____| $ cat erratum.pl sub print_table { my ( $pr_ref, $n ) = @_; print "\n"; print "$n\n"; print " ____ ____ \n"; print " | PX | PY |\n"; print " |____|____|\n"; for my $px ( sort keys %{$pr_ref} ) { for my $py ( sort keys %{ $pr_ref->{$px} } ) { print " | $px | $py |\n"; } } print " |____|____|\n"; print "\n"; } ## end sub print_table sub get_tc { my ( $pp_ref, $tc_ref, $px_immediate, $py_immediate ) = @_; for my $px ( keys %{$pp_ref} ) { for my $py ( keys %{ $pp_ref->{$px} } ) { if ( defined $tc_ref && defined $px_immediate && defined $py_immediate ) { if ( $px eq $py_immediate ) { $tc_ref->{$px_immediate}{$py} = {}; $tc_ref = get_tc( $pp_ref, $tc_ref, $px_immediate, $py ); } } ## end if ( defined $tc_ref &&...) else { $tc_ref->{$px}{$py} = {}; $tc_ref = get_tc( $pp_ref, $tc_ref, $px, $py ); } } ## end for my $py ( keys %{ $pp_ref...}) ## end for my $px ( keys %{$pp_ref...}) } ## end for my $px ( keys %{$pp_ref...}) return scalar $tc_ref; } ## end sub get_tc my $pp_ref = { P1 => { 'P2' => {}, 'P3' => {} }, P2 => { 'P4' => {} }, P3 => { 'P4' => {} }, P4 => { 'P5' => {} }, P5 => { 'P6' => {} }, }; print_table( $pp_ref, "PP" ); my $tc_ref = get_tc($pp_ref); print_table( $tc_ref, "TC" ); Note from the Author or Editor: |
Michael J. Krueger | Jun 11, 2014 | |
Printed | Page 163 Para. beginning "That said", line 2 |
The smart quotes following the symbols "<" and ">" should be closing quotes, not opening ones |
![]() C.J. Date |
Feb 08, 2013 | |
Printed | Page 206 1st bullet item |
In the sentence beginning "For one thing", replace "For one thing" by "To be specific". Delete the sentence beginning "For another" (including the immediately following SQL expression). |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 209 SQL code lines |
In the code lines beginning ON DELETE nls and ON INSERT nls, replace LS by NLS. |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 289 Within the Aside |
"Sysem" should be "System". Note from the Author or Editor: |
Anonymous | Feb 10, 2014 | |
Printed | Page 318 Para. beginning "We see", line 3 |
Replace "relvar S" by "relvar SC" |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 319 First code line |
Replace "S" by "SC". |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 319 Code block at foot of page |
In lines 1, 4, and 7, replace "S" by "SC" |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 320 Code block |
In lines 2 and 8, replace "S.*" by "*". In line 16, replace "S.SNO" by "SNO". In lines 3, 9, and 17, replace "FROM S" by "FROM SC". |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 415 Annotation to reference [33] |
In line 2, replace "features (see" by "features--see" |
![]() C.J. Date |
Feb 22, 2012 | |
Printed | Page 432 index entry for FORALL |
in subentry "not in SQL", add page number 241 |
![]() C.J. Date |
Feb 08, 2013 |